【问题标题】:Is there a way to obtain Source Code of a PDF file in Windows?有没有办法在 Windows 中获取 PDF 文件的源代码?
【发布时间】:2021-10-22 18:18:19
【问题描述】:

我一直在寻找一种方法来获取 PDF 文件的源代码,而不是 HEX 代码而是纯文本代码,我的目的是从纯文本编码 PDF 文件,这样我就可以创建 PDF 报告使用 ESP32 或 Arduino 板,将源代码上传到程序,将其保存到 SD 卡并使用 .pdf 扩展名重命名。

我知道这比添加行和字符串更复杂,就像您对 HTML 文档所做的那样。如果我添加或删除一个对象,文件将被损坏,但计划是生成一个“PDF 布局,就像这样:

PDF Layout Example
PDF Layout Table Example

这样我就不会删除或添加任何对象,只需修改已经存在的字符串。我发现我可以从像记事本这样的文本编辑器使用纯文本生成 PDF 文件,如下例所示:

    %PDF-1.4
1 0 obj
  << /Type /Catalog
      /Outlines 2 0 R
      /Pages 3 0 R
  >>
endobj

2 0 obj
  << /Type /Outlines
      /Count 0
  >>
endobj

3 0 obj
  << /Type /Pages
      /Kids [ 4 0 R ]
      /Count 1
  >>
endobj

4 0 obj
  << /Type /Page
      /Parent 3 0 R
      /MediaBox [ 0 0 612 792 ]
      /Contents 5 0 R
      /Resources << /ProcSet 6 0 R
      /Font << /F1 7 0 R >>
  >>
>>
endobj

5 0 obj
  << /Length 73 >>
stream
  BT
    /F1 24 Tf
    100 100 Td
    ( Hello World ) Tj
  ET
endstream
endobj

6 0 obj
  [ /PDF /Text ]
endobj

7 0 obj
  << /Type /Font
    /Subtype /Type1
    /Name /F1
    /BaseFont /Helvetica
    /Encoding /MacRomanEncoding
  >>
endobj

xref
0 8
0000000000 65535 f
0000000009 00000 n
0000000074 00000 n
0000000120 00000 n
0000000179 00000 n
0000000364 00000 n
0000000466 00000 n
0000000496 00000 n

trailer
  << /Size 8
    /Root 1 0 R
  >>
startxref
625
%%EOF

所以我一直在寻找一种从我的 PDF 布局中提取这种代码的方法,但我只能提取 HEX 代码,这对我的目的来说是无用的。对于这个项目的任何帮助或指导,我将不胜感激。

【问题讨论】:

  • stackoverflow.com/questions/7145778/… 检查现有的模板方法
  • 在文本编辑器中打开您的 PDF,您将获得文档的文本表示(以及那些无法以文本表示的部分)。
  • 感谢您的回复。我已经尝试过这样做,但我只能得到这样的字符:xœ•X]Sã6}ϯÐ#ûP¡K¶ó–(Ûiv[0ÙÎÎì∼Ä€wb›Úvwÿ@¯,Ù–B,› °,–9çèêèêã 我确信有一种方法可以从 PDF 中获取可读、可修改的代码,但我对 PDF 语言了解不多...
  • PDF 文件是二进制文件。字节偏移与地图一起使用以尝试布局页面和许多其他事情。这需要一个组合引擎来放置文本、紧缩字符、确定正确的换行和分页。如果不理解这一切,你永远无法编写一个简单的 hello world。更好的方法是 ESP 上的 Java,然后重写 FOP 以在这个精简的平台上运行
  • Pdf 是二进制格式。是的,您可以尝试限制自己,不使用压缩或嵌入其他二进制数据,使其在文本编辑器中看起来像纯文本。但这并不对应于一些“pdf源代码”,它只是对pdf允许的一小部分的限制。

标签: windows pdf esp32


【解决方案1】:

对于您提出的一个潜在解决方案是 MuPDF/MuTool 如果您希望反编译现有的 PDF,MuPDF-GL 中有用于 windows 的选项,使用选项 A 转换为 Ascii 和“PrettyPrint”

您可以将自己的 PDF 编写为文本,但它可能有限制,这被接受为工作 PDF

%PDF-1.2 4 0 obj << >> stream BT/ 36 Tf((Hello World!))' ET endstream endobj 3 0 obj << /Type /Page /Parent 2 0 R /Contents 4 0 R >> endobj 2 0 obj << /Kids [3 0 R ] /Count 1 /Type /Pages /MediaBox [ -195 -442 400 400 ] >> endobj 1 0 obj << /Pages 2 0 R /Type /Catalog >> endobj trailer << /Root 1 0 R > %%EOF

感谢 Thomas,请参阅 Create Memorystream of type pdf and return to browser

如果您在“小型设备”上使用 UTF 16 字符“手动打球”,这将变得更加困难,请参阅 https://stackoverflow.com/a/68442444/10802527

对生产自己的许多 RaspberryPi 用户更有用 通过 MuTool 编译 PDF 创建 https://mupdf.com/docs/manual-mutool-create.html

在编译期间要翻译的输入文本要简单得多,尤其是对于图像处理

%%MediaBox 0 0 612 792
%%Font TmRm Times-Roman
%%Font Helv-C Helvetica Cyrillic
%%Font Helv-G Helvetica Greek
%%Image I0 logo/ClientLogo.png

% Draw the image.
q
480 0 0 480 50 250 cm
/I0 Do
Q

% Draw a triangle. (Can be rectangles or a grid etc)
q
1 0 0 rg
50 50 m
100 200 l
200 50 l
f
Q

% Show some text. (Remember we humans work downwards, so 50 in then 760,730,700, etc. downwards)
q
0 0 1 rg
BT /TmRm 24 Tf 50 760 Td (Hello, from EPS32!) Tj ET
BT /Helv-C 24 Tf 50 730 Td <fac4d2c1d7d3d4d7d5cad4c521> Tj ET
BT /Helv-G 24 Tf 50 700 Td ( I am Line 3) Tj ET
Q

【讨论】:

  • 非常感谢,太棒了!是的,我正在使用 Arduino 板和 ESP32 进行“手球”,而 .pdf 报告是设计用于医疗运输的便携式温度数据记录器的最后一步。顺便说一句,我不知道为什么我得到了 2 票,可能是语法?这是个坏问题?无论如何,也许你可以提供一些建议,我认为创建一种从纯文本制作 pdf 报告的方法可能非常有用,因为 .pdf 文档比 .txt 或 excel 电子表格更复杂一些......无论如何,谢谢很多,我一直在寻找这样的东西没有成功,谢谢!
  • 谢谢,我删除了图像,这样我可以将代码从 5k 行减少到大约 1k,我发现我可以将文本附加到表格中,例如,“BT /F2 6 Tf 224 749 Td (24/08/2021 13:24:00 13.55 14.66 13.44)Tj ( )Tj ET Q q" 这样我就可以在不损坏文件或修改外部参照预告片的情况下向预定义表添加新行我可以将数据添加到报告中,直到页面空间不足...不完整,但我的方向正确。非常感谢。
  • 是的,我使用的是 Courier 字体,这样更容易,现在我只处理每行的坐标,用“for循环”我减去每行的高度,直到它到达底部页面,然后使用“if 条件”在页面顶部从它旁边重新开始并重新启动“for 循环”,直到空间不足...我使用的是 2 页模板和小字体,这样我就可以在不创建新页面的情况下添加大量数据。
  • 哇,每条评论都是金,谢谢KJ!!我将搜索有关 SVG 图像的更多信息
【解决方案2】:

我找到了 PDFEdit 软件的解决方案。 http://pdfedit.cz/en/pdfedit_windows.html 在 Debug 部分有一个名为 Decode 的选项,它生成一个 .decode 文件,然后我用记事本打开它,我能够得到一个可读的、可修改的代码(在我需要的部分可以修改,例如日期、小时名称、温度、路线等)。 您可以尝试并修改一些文本,然后将其保存为 .pdf,您将能够查看更改。 证据: Original Document unmodified "Source Code" viewed in NotePad 更改一些文本后,我将其保存为 .pdf 并看到了我想要的更改。 [用记事本修改文档3

代码非常广泛(5000 行),但也许我可以生成一些非常简单的模板并减少这些行。谢谢大家!

【讨论】:

    猜你喜欢
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 2017-06-16
    • 1970-01-01
    • 2010-11-13
    • 2022-01-07
    • 2010-11-24
    • 1970-01-01
    相关资源
    最近更新 更多