【问题标题】:PDF doesn't wrap text lines automatically & respect line positionPDF不会自动换行并尊重行位置
【发布时间】:2014-09-28 17:25:33
【问题描述】:

我正在尝试通过代码生成 PDF,因为并非所有实际的 PDF .NET 库都支持适用于 Windows/Windows Phone 8.1 的新 Windows 运行时。 PDF 已正确保存,只有一个流位置计数错误,我可以轻松修复,但是,如您所见,如果行太长,文本不会换行。

我尝试使用 PDF NewLine char (\n),但 C# 会自动将其转换为输入字符串 另外,我无法理解要放入文档中的线条或对象的位置,因为我遵循这个guide online 谈论反转轴配置(x 表示高度,y 表示宽度),但似乎我没有抓住正确的方法(我在我的代码中放置了一个恒定的左侧位置,40 和一个可变的顶部递减值(从 600 开始,如果值小于 0,我现在不管理多页)。

这是生成的PDF代码:

http://pastebin.com/ZkZmbJdM 

(对不起,如果我使用 Pastebin,但使用此编辑器代码功能,代码似乎未格式化用于它的特殊字符)

我哪里做错了?

【问题讨论】:

    标签: c# pdf


    【解决方案1】:

    PDF 是一种图形格式,试图让您认为它是一种文档格式。但是不,这就像使用 GDI+ 进行绘图一样。这就是为什么它可以在许多平台/程序/等上实现相同的渲染输出,而不是像 doc/docx 这样的文本流格式。而且,这也是它真正可以渲染任何东西的原因。

    因此,与文档格式相反,生成 PDF 的程序负责正确布局。把它想象成使用 GDI+ 绘图。

    在 docx 或 html 等文档中,渲染程序必须完成布局工作。有了这样的文档,您只需编写文本,查看器就会负责布局。

    您的 PDF 库肯定有测量文本长度的必要代码。也许它甚至有一些代码来提供一些布局功能。您必须使用这些函数来进行布局。

    【讨论】:

    • 事实上我不使用任何库。对于字符串宽度,我使用通过给定特定 FontSize 和 FontFamily 以编程方式创建的假 TextBlock,我在 TextBlock 实例的 Arrange 和 Measure 方法调用之后提取 ActualWidth 属性并拆分字符串。但我的问题是文档没有创建任何新行……我不明白为什么。
    • 我认为你应该每行使用一个文本块,这就是我所说的布局部分。
    • 所以你是说我尝试对每个文本行使用缩进对象? n 0 obj 文本行 n endobj m 0 obj 文本行 m endobj 等等?
    • 并非如此。查看reference 的第 311 页。你可以写(first line) ' (second line) '
    • 有效!现在我必须只解决不起作用的自动换行,但我想我可以详细说明一个可以更好地计算字符串宽度的函数。非常感谢!
    猜你喜欢
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多