当前位置: 首页 > 知识库问答 >
问题:

iTextSharp-PDF字体TT1B4t00错误的大小

东郭宏朗
2023-03-14

我是iTextSharp来获取文本块来构建单词并从现有PDF中获取位置。我正在使用字体大小来计算“单词”的内联块和大小。这一直运行良好,但最近我遇到了一个作者(ClarityPDF)创建的现有PDF,该作者制作了字体TT1B4t00。当我使用iTextSharp阅读块时,我得到了不同的大小,这给了我一个不正确的位置。

所有的PDF文档都使用Arial Narrow 12pt。我在同一个文档上使用ClarityPDF和BluebeamPDF编写器进行了一个简单的测试。

结果是:

  • 两位作者都将文档源放在同一位置

  • 有没有一种方法可以通过编程将它们转换回Arial窄带12 pt
  • 有人看过字体TT1B4T000吗?如果是这样的话,它可能有一个比例因子或单位类型,我没有,可以添加到我的程序
  • 这个问题可能是我没有想到的吗

文件夹https://drive.google.com/file/d/1uq9rWz10u31Fhkp39UtkYc-W1GZPooih/view?usp=sharing https://drive.google.com/file/d/1E0LPXRGWATBW1nrlDKk4Oo4BvMBnxBIC/view?usp=sharing

下面是我的Render text方法的示例代码,它获取文本位置和字体大小。

// **************************RenderText**************************
    public void RenderText(TextRenderInfo renderInfo)
    {
        // Get the current line 
        LineSegment segment = renderInfo.GetBaseline();
        var location = new TextChunk(renderInfo.GetText(), segment.GetStartPoint(), segment.GetEndPoint(), renderInfo.GetSingleSpaceWidth());

        Debug.Print(renderInfo.GetText());
        // Get position and location of text. 
        Vector horizonCoordinate = renderInfo.GetDescentLine().GetStartPoint();
        Vector verticalRight = renderInfo.GetAscentLine().GetEndPoint();
        location.PosLeft = horizonCoordinate[Vector.I1];
        location.PosRight = verticalRight[Vector.I1];
        location.PosBottom = horizonCoordinate[Vector.I2];
        location.PosTop = verticalRight[Vector.I2];

        location.curFontSize = location.PosTop - segment.GetStartPoint()[Vector.I2];

        string strKey = string.Concat(renderInfo.GetFont().PostscriptFontName, location.curFontSize);
        // Add fonts types to a list. 
        if (!ThisPdfDocFonts.ContainsKey(strKey))
        {
            ThisPdfDocFonts.Add(strKey, renderInfo.GetFont());

            Console.WriteLine(strKey);
            Console.WriteLine(location.curFontSize);
        }


        // Set font type to chunk
        location.FontIndex = ThisPdfDocFonts.IndexOfKey(strKey);
        // add chunk to list 
        string txt = location.text;
        locationalResult.Add(location);
    }

非常感谢。

共有1个答案

许正平
2023-03-14

PDF编写器正在将PDF旋转90度,我可以使用itext-rups-5.5.9看到它。这很奇怪,因为在查看器中看不到这种旋转。此外,ClarityPDF编写器正在图形中间Y轴上镜像坐标系。一旦我解释了这两件事,区块位置就正确了。

 类似资料:
  • 问题内容: Enthough Canopy Mayavi mlab中的字体大小设置似乎已损坏。 这两个命令都没有: 直接菜单字体大小命令(高级设置)也不起作用。 我已经用Enthought记录了一个错误报告,但是它看起来像是一个更普通的Mayavi错误,请参见 Mayavi“字体大小”文本属性是否起作用? 问题答案: 正如您所说,这是与mayavi层和vtk层之间的转换有关的错误。但是现在您可以使

  • 2013年7月17日1:05:28 PM org.apache.pdfbox.util.pdfstreamengine processOperator信息:不支持/禁用操作:BDC 2013年7月17日1:05:29 PM org.apache.pdfbox.util.pdfstreamengine processOperator信息:不支持/禁用操作:EMC DeviceGray org.apa

  • 我不知道发生了什么,但在浏览器控制台中,我可以看到3个与字体相关的错误 我知道这是荒谬的,我不能自己解决这个问题,但一切似乎都好,在我的index.html我有这样的东西 这就是我所有与字体相关的东西,我已经检查了路径,我没有错。 这是发生在你们中间的吗? 更新 这是NGINX部分,我在头部加载了一些内容

  • 在上载PDF过程开始之前,我需要检查PDF是否具有以下属性,

  • 我试图使用ITextSharp旋转PDF文档中的各个页面。它看起来很有效,因为当我在土坯上打开时,一切看起来都很好。然而,当试图在itextSharp中重新打开时,会抛出各种异常。我可以看出文档出了问题,因为adobe总是问我是否要保存更改时,打开一个与itextSharp操纵的文档,这表明它修复了损坏。 疯狂的是,我甚至不必对文档进行任何操作,只需创建一个新的压模并关闭它。下面是代码,被剥离到仍

  • 出身背景 我使用iTextSharp已经有一段时间了。我已经创建了一个带有两个可签名的PdfFormFields的pdf文档。如果我打开pdf文档,我可以手动对每个字段进行手动签名。我希望通过iTextSharp完成这件事。 我目前正在从X509Store检索证书。直到现在,我都能弄明白。 问题 有人能告诉我如何使用X509Certificate2签署一个已经存在的签名字段吗。 工具书类 以下参考