打印为 PDF 时文本不可选择

问题描述 投票:0回答:3

我有一个专为打印而设计的视图,其中包括水印,一个透明视图,可在其他内容之上绘制一些文本。

打印和使用 Mac OS 另存为 PDF 功能时,可以选择水印文本。有时这会干扰选择其他内容,有时它只是分散注意力。

如何使生成的 PDF 中的文本不可选?

我尝试将水印绘制在其他内容后面而不是前面。它不会阻止选择水印,但不会妨碍其他内容。然而,表视图行遮挡了水印,这当然更糟糕。


评论者要求提供代码,所以这里有一些准备视图的代码:

// self.view is the print view
// watermark is an instance of WatermarkBackground, an NSView
if (watermark) {
    watermark.frame = self.view.frame;
    [self.view addSubview:watermark positioned:NSWindowAbove relativeTo:nil];
}

以及 [WatermarkBackground drawRect] 中进行绘图的行:

// _message is an NSString
// textAttributes returns a dictionary with a color and font
[_message drawWithRect:textRect
               options:NSLineBreakByWordWrapping
            attributes:[WatermarkBackground textAttributes]];

我本来想发布这个截图:

enter image description here

cocoa pdf
3个回答
2
投票

一种选择是从字符串中创建一个或多个

CGPath
并将它们绘制到 PDF 中。一种方法是使用
CTFontCreatePathForGlyph
,但实际上对整个字符串执行此操作需要大量工作,Core Text 确实有帮助,但它是一个相当低级的框架。

如果您总是绘制相同的水印,则在某些矢量图形应用程序中创建静态 PDF 并将其与

CGPDFPageDraw
等一起使用会更容易。Illustrator 有一个用于文本对象的“转换为路径”命令。


0
投票

据我所知,没有办法使PDF中的文本变得不可选择。 可能最好的解决方案是使用图像水印。

但是,如果它位于文本前面,则会导致背景文本难以选择。如果它位于所有内容的后面,那么用表格来模糊它也会出现同样的问题。因此,更好的行动计划可能不是尝试使文本不可选择,而是使表格背景透明。然后,使用图像水印。

借鉴 omz 的想法,最简单、最优雅的解决方案是这样的,而不是使用 CGPaths 并动态生成它们:

  1. 通过在矢量编辑器中键入文本并展开文本以创建轮廓来创建矢量水印。
  2. 将其另存为 SVG 或 PDF。
  3. 然后,将这个新的矢量图形作为水印放在顶部。它不会被选择,不会遮挡视图,也不会被表格遮挡。

0
投票

有一个解决方案可以使整个 PDF 不可选择且无法复制。

  • 在 Windows 上,打开 PDF 并通过“Microsoft Print to PDF”进行打印。
  • 在窗口顶部,启用“[x] 打印为图像”复选框。

这样,生成的新 PDF 就变成了一组像素,而不是精心渲染的矢量字体、文本、形状等。虽然阅读起来不太好,但仍然足够好。

© www.soinside.com 2019 - 2024. All rights reserved.