首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同pdf查看器的不同结果

不同pdf查看器的不同结果
EN

Stack Overflow用户
提问于 2021-06-29 13:28:23
回答 1查看 223关注 0票数 1

我和我的团队最近从ITextSharp变成了PdfSharp,因为ITextSharp变得非常慢,我们似乎无法解决这个问题。

但是现在我们有一个问题,我们的pdf,由PdfSharp填充,比来自ITextSharp的要大200 is。大小本身并不是问题所在,当我们在firefox中打开pdf时,数据在查看器中仍然显示得很好,但是当我们想要打印它时,所有的多行字段突然变成一行,字体也不同了。

我们在我们的顶体元素上有/NeedAppearance,并试图删除它以查看它在adobe中的样子,等等,它看起来与firefox中的打印屏幕上的外观一样。

NeedAppearance不在我们的ITextSharp文档中,它在每个查看器中都显示得很好。

这是我们用来设置文本的代码:

代码语言:javascript
复制
public static bool SetField(this PdfAcroForm form, string fieldName, string value)
{
        PdfTextField field = (PdfTextField)form.Fields[fieldName];

        if (field != null)
        {
            field.Text = value;
        }

        return field != null;
}

在设置字段的末尾,我们有一个document.flatten()来使字段readOnly。

--一个小插曲,

一旦我们在adobe中打开pdf,并且我们想关闭它,它希望我们保存它,而不改变文档。一旦我们保存了它,它就少了200 in,并且突然在所有的观众中工作。这是开着/NeedAppearance的。

更新1

我花了一整晚时间来寻找解决方案,但却找不到。但到目前为止,我已经找到了这样的答案:

在设置了每个属性之后,每个PdfTextField上都会有一个/AP元素,该元素包含对对象的引用,该对象包含应该绘制的内容。

我认为Adobe能够理解/NeedAppearance元素,因此每个字段上的/AP元素都是正确的。文件后面的kb较少,是因为Adobe对元素上的流做了一些操作,某种编码方式,从而减少了空间。

因此,就像现在一样,我认为我也创建了一个新的平面方法,它正确地创建了/AP元素。我不知道为什么当前的Flatten方法不这样做,因为它只是将字段更改为只读。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-02 17:48:40

最后我要做的是创建我自己的扁平方法。

扁平方法所做工作的总结:

我已经把它扩展到PdfAcroForm了。

我循环遍历所有字段,但PdfChecboxfield除外,因为显示得很好。然后我去找字段所在的页面,并从该页面创建和XGraphics

然后,从元素/Rect获得字段的位置和大小。

然后将我的XGraphics放入一个XTextFormatter中,并通过字段中的元素在我的XTextFormmater上设置外观。

然后我使用XTextFormatter.Drawstring(),然后,释放我的XGraphics

然后,为了删除字段,我删除了该字段上的所有元素。

如果你对此不清楚,请发表意见,我会尽力帮助你的。

免责声明:

我创建的扁平化方法,将删除您的字段,您的不能撤消它。它将文本写在pdf上,但只需在字段位置上进行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68179661

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档