gpt4 book ai didi

pdf - 相同的图像操作应用于两个不同的 PDF,结果不同

转载 作者:行者123 更新时间:2023-12-04 09:15:52 24 4
gpt4 key购买 nike

我正在处理两个不相同的 PDF,但要对它们应用相同的操作。

  • 第一个是由 Microsoft Office 365 通过下载 PDF 格式的 Word 文档生成的
  • 第二个是由 Google Drive 通过下载 PDF 格式的 Google Docs 文档生成的

  • 我正在使用 Aspose 处理一些初步代码使用完全相同的代码将相同的图像应用于两个 PDF 文件。我不倾向于立即责怪库,因为它能够在对 Office 365 文档进行操作时生成正确的输出:
    // note: Anyone familiar with the PDF format itself should have no 
    // issues inferring the low-level operations being performed here...

    fun Page.writeImage(image: InputStream) {

    val imageName = resources.images.add(image.inMemory());

    val rectangle = rectangleFromTopLeft(0.0, 0.0, 400.0, 200.0);
    val matrix = rectangle.defaultMatrix();

    contents.add(listOf(
    GSave(),
    ConcatenateMatrix(matrix),
    Do(imageName),
    GRestore()
    ));
    }
    无论我提供哪个文件,这两种情况下矩形和矩阵的坐标保持不变。
    对于 Office 365 派生的 PDF,图像将按照我的指定应用于页面。事情变得奇怪的地方是,当我打开 Google Docs 派生的 PDF 时,图像被垂直翻转并位于页面底部!
    View the four PDF files in their before and after states.
    我希望任何 PDF 专家都能向我解释这里发生了什么。我最初怀疑 Google Docs PDF 中的某些先前状态或操作在我的图像操作之前已经生效。
    也就是说,我对 PDF 规范还不够熟悉(还!),无法将其挑选出来......

    最佳答案

    我不知道你应该责怪谁,但造成这种差异的原因很简单。
    Google Docs 文档有一个以以下开头的页面流:

    1 0 0 -1 0 792 cm
    这基本上完成了页面的垂直翻转,792 是为了补偿并将内容移回页面上 - 它应该是页面的高度(以磅为单位)。
    它没有将其封装在 q ... Q 中配对执行“保存...恢复”,这意味着现在为页面上所有后续内容的其余部分设置此矩阵。您可能已经知道,PDF 规范没有提供重置页面矩阵的方法,您只能附加到它。
    当您最后向页面添加内容时,您的内容现在继承了这个矩阵,这就是为什么您看到它翻转并位于底部的原因。
    Microsoft 文件没有这样做,因此它被正确处理。在这种情况下,矩阵仍然是单位矩阵,您最终会得到您期望的内容。
    如何解决这个问题?好吧,如果您的库不提供了解当前页面矩阵是什么的方法,那将非常困难。当然,它可以通过应用逆矩阵来抵消 Google 在这里所做的愚蠢事情,“仅针对此文档”来解决,但我可以想象这不是您正在寻找的处理此问题的 final方法。

    关于pdf - 相同的图像操作应用于两个不同的 PDF,结果不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63220493/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com