C# 应用程序的 PDF writer 类中的正确 PDF 代码结构

问题描述 投票:0回答:1

我已经为 Windows 窗体 C# 应用程序编写了一个简单的 PDF 编写器类,但在 PDF 输出方面遇到了一些问题。

应用程序成功创建并写入文件,但是当我在 PDF 查看器中打开文件时,仅显示第一行(Hello world!),而文档中应包含的接下来两行不可见。

当我在记事本中打开文件时,这是输出:

%PDF-1.7
1 0 obj
<< /Type /Catalog
/Pages 2 0 R
>>
endobj
2 0 obj
<< /Type /Pages
/Kids [3 0 R]
/Count 1
>>
endobj
3 0 obj
<< /Type /Page
/Parent 2 0 R
/Resources << >>
/Contents 4 0 R
/MediaBox [0 0 612 792]
>>
endobj
4 0 obj
<< /Length 300 >>
stream
BT
/Arial 12 Tf
50 700 Td
(Hello world!) Tj
50 680 Td
(01/05/2024 08:50:34) Tj
50 660 Td
(29 April 2024 - 01 May 2024) Tj
ET
endstream
endobj
<<
/Type /Metadata
/Subtype /XML
/Length 100
>>
stream
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/">
</x:xmpmeta>
<?xpacket end="w"?>
endstream
endobj
<< /MarkInfo << /Marked true >> >>
endobj
<< /Type /StructTreeRoot >>
endobj
xref
0 5
0000000000 65535 f 
0000000009 00000 n 
0000000055 00000 n 
0000000108 00000 n 
0000000197 00000 n 
trailer
<< /Root 1 0 R
/Metadata 5 0 R
/MarkInfo 6 0 R
/StructTreeRoot 7 0 R
/Size 5
>>
startxref
254
%%EOF

为什么只显示第一行?我的 PDF 代码结构是否有错误?还是PDF阅读器的问题?

请注意,我不想为此项目使用外部 PDF 编写器库。

c# winforms pdf pdf-generation
1个回答
0
投票

Td 运算符的工作方式如下: Td operator 您的第一个 Td 运算符将绘图位置移动到 (50, 700),但第二个将其移动到 (100, 1380),该位置位于页面可见区域之外。

此修复

BT
/Arial 12 Tf
50 700 Td
(Hello world!) Tj
0 -20 Td
(01/05/2024 08:50:34) Tj
0 -20 Td
(29 April 2024 - 01 May 2024) Tj
ET

将生成以下输出: PDFXplorer

您的 PDF 文件还存在几个问题:页面内容流的长度不正确,并且 /Resources 字典中没有 /Arial 字体。这些错误

© www.soinside.com 2019 - 2024. All rights reserved.