Cocoa 打印为PDF时使文本不可选择

Cocoa 打印为PDF时使文本不可选择,cocoa,pdf,Cocoa,Pdf,我有一个设计用于打印的视图,其中包括水印,一个在其他内容上绘制一些文本的透明视图 打印和使用Mac OS另存为PDF功能时,水印文本是可选的。有时这会干扰其他内容的选择,有时这会分散注意力 如何使生成的PDF中的文本不可选择 我试着在其他内容后面而不是前面画水印。它并没有阻止选择水印,而是让它远离其他内容。但是,表视图行遮挡了水印,这当然更糟糕 评论者要求提供代码,下面是一些准备视图的代码: // self.view is the print view // watermark is an i

我有一个设计用于打印的视图,其中包括水印,一个在其他内容上绘制一些文本的透明视图

打印和使用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]];

我原本打算发布这个截图:


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

但是,如果它位于文本前面,则会使背景文本难以选择。如果它是一切的幕后黑手,那么用表格掩盖它也会有同样的问题。所以,可能更好的行动计划不是试图使文本不可选择,而是使表格背景透明。然后,使用图像水印

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

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

  • 一个选项是从字符串中创建一个或多个
    CGPath
    s,并将其绘制到PDF中。一种方法是使用
    CTFontCreatePathForGlyph
    ,但实际上要对整个字符串执行此操作需要大量工作,核心文本确实有帮助,但它是一个相当低级的框架


    如果您总是绘制相同的水印,那么在一些矢量图形应用程序中创建静态PDF并将其与
    CGPDFPageDraw
    等一起使用会容易得多。Illustrator有一个用于文本对象的“转换为路径”命令。

    向我们展示您正在使用的一些代码。。首先从这一点开始\n我不确定代码的哪一部分有助于查看,但发布了两个最相关的位。我将使用具有透明背景的图像作为水印。非常简单,可以实现您的目标。谢谢。如果无法使文本不可选择,则使用图像是有意义的。但由于我使用交替的行颜色,我不知道如何使表格背景透明。(我贴了一张截图。)嗯。考虑到这一点,我认为omz的答案是正确的。我将编辑我的答案来解释新的想法。@Jonas你的陈述不准确,有几种方法可以做到这一点,实际上有几种方法。在最坏的情况下,可以使用正常的绘图操作(直线和曲线)绘制文本,但它将不可选择。omz的答案是要走的路