使用 pdfnet 下划线会导致不同的线条粗细

2024-03-20

我用来为所选文本添加下划线的代码。我开始调用 addUnderline() 方法,其他方法是辅助方法。

private pdftron.SDF.Obj CreateUnderlineAppearance(pdftron.PDF.Rect bbox)
        {
            ElementBuilder builder = new ElementBuilder();
            ElementWriter writer = new ElementWriter();

            builder.PathBegin();
            builder.MoveTo(bbox.x1, bbox.y1);
            builder.LineTo(bbox.x2, bbox.y1);
            Element line = builder.PathEnd();

            //Set color attributes for the line... 
            line.SetPathFill(false);
            line.SetPathStroke(true);

            GState gs = line.GetGState();
            gs.SetStrokeColorSpace(ColorSpace.CreateDeviceRGB());
            gs.SetStrokeColor(new ColorPt(0, 0, 0));  // black
            gs.SetLineWidth(2);

            writer.Begin(m_document);
            writer.WriteElement(line);
            pdftron.SDF.Obj stm = writer.End();

            builder.Dispose();
            writer.Dispose();

            // Set the bounding box 
            stm.PutRect("BBox", bbox.x1, bbox.y1, bbox.x2, bbox.y2);
            stm.PutName("Subtype", "Form");

            return stm;
        }

        public Annot CreateUnderlineAnnot(pdftron.PDF.Rect rect)
        {
            Annot underlineAnnot = Annot.Create(m_document, Annot.Type.e_Underline, rect);
            underlineAnnot.SetAppearance(CreateUnderlineAppearance(rect));
            return underlineAnnot;
        }
        public void AddUnderline()
        {
            if (m_document != null)
            {
                PDFViewCtrl.Selection selection = m_pdfViewer.GetSelection();
                int pageNumber = selection.GetPageNum();
                double[] quads = selection.GetQuads();
                int numQuads = quads.Length / 8;

                if (quads.Length % 8 == 0) //must have at least 8 points to be valid
                {
                    Console.WriteLine("GetRectsFromQuads - numQuads: " + numQuads.ToString());

                    for (int i = 0; i < numQuads; i++)
                    {
                        Rect selectionRect = GetSelectionRect(ref quads, i);
                        //Console.WriteLine("GetRectsFromQuads - aRect: " + rectX1.ToString() + " | " + rectY1.ToString() + " | " + rectX2.ToString() + " | " + rectY2.ToString());

                        Annot underlineAnnot = CreateUnderlineAnnot(selectionRect);
                        m_pdfViewer.AddUnderlineAnnotationToPage(underlineAnnot, pageNumber);

                        //m_pdfViewer.Refresh(); --> to see how this algorithm works when debugging
                    }
                    m_pdfViewer.RefreshAnnotations();
                }
            }
        }

如果仔细观察,您可以在图像中看到某些线条比其他线条更粗或更细。这可以修复吗?顺便说一句,当我放大/缩小时,问题就消失了......


您需要在 pdf 视图控件上设置以下内容:

PDFViewCtrl.SetThinLineAdjustment(true, true);

这将消除线条上的锯齿,意味着所有 1.5 像素的线条都是 1 像素,依此类推。看这里:https://www.pdftron.com/pdfnet/mobile/docs/WinRT/html/M_pdftron_PDF_PDFViewCtrl_SetThinLineAdjustment.htm https://www.pdftron.com/pdfnet/mobile/docs/WinRT/html/M_pdftron_PDF_PDFViewCtrl_SetThinLineAdjustment.htm

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pdfnet 下划线会导致不同的线条粗细 的相关文章

随机推荐

  • 我想减少 VS.NET 项目的编译时间 - 您对此有何想法?

    我的项目是在 Visual Studio 08 中使用 C 开发的 它是一个独立的桌面应用程序 大约有 6 万行代码 曾几何时 我喜欢使用这个软件 现在编译时间已经增长到大约 2 分钟 它变得不再那么令人愉快 我认为我缺乏 C 经验可能是一
  • Android OpenGL - ES 纹理渗色

    我正在编写一个小应用程序 目前可以生成随机纹理图 我将这张地图绘制为一组 10 x 15 的 四边形 它们实际上都是三角形带 我使用 map 来获取一个int 然后将其作为textureAtlas 中该正方形的纹理位置 例如 0 是左下角的
  • 自定义字段未保存

    我尝试使用 WPGraphQL 向用户添加自定义用户字段 因此我尝试重新创建官方 WPGraphQL 文档中的示例https docs wpgraphql com extending fields register fields to th
  • 使用 openssl aes 256 cbc 对加密文件进行 Java 解密

    几天来我一直在尝试用java解密一条用openssl加密的消息 使用以下命令对消息进行加密 openssl enc e aes 256 cbc kfile file key in toto out toto enc 文件file key包含
  • 从子 UIViewController 调用父 UIViewController 方法

    我有一个父 UIViewController 它打开一个子 UIViewController let storyboard UIStoryboard name Main bundle nil let vc storyboard instan
  • 在 C# 中创建或替换没有根的 XML 中的节点

    我有一个像这样的 XML 文件
  • 在 Tkinter 中按下按钮后如何清除 Entry 小部件?

    我正在尝试清除Entry用户使用 Tkinter 按下按钮后的小部件 我尝试使用ent delete 0 END 但我收到错误消息说字符串没有该属性delete 这是我的代码 我在其中遇到错误real delete 0 END secret
  • C# 数组是否保证在内存中顺序存储?

    根据互联网上的许多资料 在 C 中 数组是按顺序存储的 也就是说 如果我有一个指向数组中第一个元素的指针 比如说int start array 0 然后我可以访问array i 通过做 start i 但是 我正在查看存储在中的 C 语言规
  • 在Python中,使用bisect在字典列表中查找项目

    我有一个字典列表 如下所示 test data offset 0 data 1500 offset 1270 data 120 offset 2117 data 30 offset 4055 data 30000 字典项在列表中按照以下顺序
  • 将 MBean 从 JBoss 4.x 移植到 JBoss 7

    我们目前正在将一些项目从 JBoss 4 x 移植到 JBoss 7 到目前为止 一切似乎都工作正常 除了 MBean 之外 我们通常使用 MBean 来提供简单的管理操作 我已经搜索了很长一段时间 但要么我无法提出正确的搜索词 要么我缺少
  • 在使用“with”子句的查询中使用 Laravel 的 toSql

    我正在 Laravel 工作 我有兴趣检查由包含 with 语句的 Eloquent 查询生成的 SQL 语句 由于某种原因 我只得到主要查询 例如 当我跑步时 class Child extends EloquentVersioned p
  • jQuery 选择列表删除所有选项

    我有一个
  • 如何在iOS项目中使用dylib库和hpp头文件?

    我已经获得了一个 dylib 库和一个 hpp 头文件 我应该在 Xcode 中的 iOS 项目中使用它们 我一直在网上查找 但所有答案都很简洁 没有具体的步骤可遵循 我只需将这些文件复制到我的项目中吗 如何在 Obj C 类中创建 使用库
  • 如何估计线程上下文切换开销?

    我正在尝试通过实时截止日期来提高线程应用程序的性能 它运行在 Windows Mobile 上并用 C C 编写 我怀疑高频率的线程切换可能会导致有形的开销 但既不能证明也不能反驳它 众所周知 缺乏证据并不是相反的证明 因此我的问题是双重的
  • iPhone UITableView:如何删除组样式表中各部分之间的间距?

    我正在创建一个表格视图 其中有 10 个部分 所有部分都有标题视图 但没有单元格 所以 简而言之 我的表视图将仅显示 10 个标题视图 任何部分都不会有单元格 现在 当我这样做时 该部分的标题视图之间有一些空间 我想删除那个空格 那可能吗
  • 在 Flutter 中显示几秒钟后没有执行操作按钮时关闭 AlertDialog

    我有一个 AlertDialog 弹出几秒钟 然后自动弹出 没有执行任何操作按钮 弹出后 会显示另一个AlertDialog 我怎样才能做到这一点 这是我的示例代码 初始化计时器以显示第一个对话框 timerToShowFirstDialo
  • AVFoundation,在预览层中剪掉边缘

    我正在开发一些 iOS 应用程序 我需要在其中进行一些相机扫描 这是我第一次体验 AVFoundation 之前我使用 UIImagePickerController 开发相机应用程序 但 AVFoundation 似乎更强大 问题是它会切
  • 使用 doPost 将文件上传到 Google Web Apps

    我正在尝试使用 doPost e 将文件上传到 Google Web App 如下所示 function doPost e var blob e parameter myFile DriveApp createFile blob 然后将文件
  • Intel x86 与 AMD x86 CPU 上的访问性能不一致

    我已经实现了一个带有结构内存布局数组的简单线性探测哈希图 该结构包含键 值和指示条目是否有效的标志 默认情况下 该结构体由编译器填充 因为键和值是 64 位整数 但该条目仅占用 8 个布尔值 因此 我也尝试以未对齐访问为代价来打包结构 由于
  • 使用 pdfnet 下划线会导致不同的线条粗细

    我用来为所选文本添加下划线的代码 我开始调用 addUnderline 方法 其他方法是辅助方法 private pdftron SDF Obj CreateUnderlineAppearance pdftron PDF Rect bbox