吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1292|回复: 6
收起左侧

[求助] 求个C#用PdfSharp或其他库读取PDF中标准表格的例子(PDF应该就是word或excel转的PDF)

[复制链接]
ilovecomputer66 发表于 2022-11-28 09:44
本帖最后由 ilovecomputer66 于 2022-11-28 09:54 编辑

手头有一些很标准的pdf表格(可以保证标准,来源应该就是word或者excel直接转为的,因为我通过在线付费的转换网站,可以把PDF转为excel),想用C#编程,读取其中的内容

求个例子,pdfsharp官网的sample没有类似的,基本都是在合并、裁剪或者写内容这种简单的

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Broadm 发表于 2022-11-28 11:16
到悬赏区吧
zhang120300 发表于 2022-11-28 11:49
使用Spire.Pdf  中 ExtractText  就能读取PDF内容了。前提是你那PDF里面放的不是图片,如果是放图片只能去提取出图片 然后识别图片了。

[C#] 纯文本查看 复制代码
  StringBuilder content = new StringBuilder();
            foreach (PdfPageBase page in doc.Pages)
            {
                content.Append(page.ExtractText());
            }
 楼主| ilovecomputer66 发表于 2022-11-28 11:52
zhang120300 发表于 2022-11-28 11:49
使用Spire.Pdf  中 ExtractText  就能读取PDF内容了。前提是你那PDF里面放的不是图片,如果是放图片只能去 ...

这样出来。还有表格格式么?还能分清行列么。。
xzqsr 发表于 2022-11-28 13:09
https://stackoverflow.com/a/44902182

PDF中并没有“表格对象”这种数据结构,你看到的表格,其底层是文字和直线,只不过位置排列得很整齐而已。
所以似乎没有能够直接取出“表格对象”的方法。只能通过提取文字,并通过“某种方式”分析出文字之间的关系,恢复表格。例如:

[Asm] 纯文本查看 复制代码
| 今天真是个 | 明天应该有 |
| 好天气   | 大暴雨   |


从上表中应该能够提取出“今天真是个”、“明天应该有”、“好天气”、“大暴雨”四句话,但你应该设法以“某种方式”将其恢复成“今天真是个好天气”和“明天有大暴雨”两句,才是真正的单元格内容。

关于“某种方式”如何实现,上面的链接中已经给出了一些方法,并且给出了一个例子:
https://github.com/bubibubi/ExtractTablesFromPdf
 楼主| ilovecomputer66 发表于 2022-11-28 14:23
xzqsr 发表于 2022-11-28 13:09
https://stackoverflow.com/a/44902182

PDF中并没有“表格对象”这种数据结构,你看到的表格,其底层是 ...

它这个方法做的效果很差,一个表格单元格中如果有换行,它无法正常分辨,就使得不同行和一个行中内容的回车,全部混淆

比网上转换网站的效果差太远
陈总ing丶 发表于 2022-12-20 10:06
[C#] 纯文本查看 复制代码
using PdfSharp.Pdf;
using PdfSharp.Pdf.IO;
using PdfSharp.Drawing;
using System.IO;

// 读取 PDF 文件
PdfDocument document = PdfReader.Open("table.pdf");

// 获取 PDF 中第一页
PdfPage page = document.Pages[0];

// 使用 PdfSharp 绘图功能渲染 PDF 页面
XGraphics gfx = XGraphics.FromPdfPage(page);

// 使用 XPdfForm 来渲染 PDF 表格
XPdfForm form = XPdfForm.FromTemplate(page);
gfx.DrawImage(form, 0, 0);

// 使用 XFont 和 XBrush 在 PDF 表格上绘制文本
XFont font = new XFont("Arial", 10, XFontStyle.Regular);
XBrush brush = XBrushes.Black;
gfx.DrawString("Hello, World!", font, brush, 10, 10);

// 保存渲染后的 PDF 页面到新文件
document.Save("table_modified.pdf");
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-11 23:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表