Microsoft print to pdf 现在打印的pdf无法复制搜索怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Microsoft print to pdf 现在打印的pdf无法复制搜索怎么回事相关的知识,希望对你有一定的参考价值。

之前用Microsoft print to pdf打印出来的pdf都可以进行复制和搜索,不管是从网页上打印、还是从可复制的pdf打印,但是现在突然发现同样方法打印出来的pdf是图片格式的,不知道什么回事,求助!

1、按下“Windwos+X”组合键打开系统快捷菜单,点击【控制面板】;
2、确保控制面板右上角的查看方式为“类别”,在下面点击“卸载程序”;
3、在“程序和功能”界面点击“启用或关闭Windows 功能”;
4、在“Windows 功能”框中勾选“microsoft print to pdf”,然后点击确定等待系统自动下载安装;
5、安装完成后点击“关闭”;
6、重新打开“设备和打印机”就可以使用“microsoft print to pdf”了。
参考技术A 如果 不行,建议安装Adobe Acrobat XI Pro软件,用Adobe PDF打印机打印你要输出的内容,即可得到你要的PDF文档。

如何使用 Windows 10 附带的 Microsoft Print To PDF 打印机以编程方式打印到 PDF 文件而不提示 C# 中的文件名

【中文标题】如何使用 Windows 10 附带的 Microsoft Print To PDF 打印机以编程方式打印到 PDF 文件而不提示 C# 中的文件名【英文标题】:How to programmatically print to PDF file without prompting for filename in C# using the Microsoft Print To PDF printer that comes with Windows 10 【发布时间】:2015-11-01 00:47:43 【问题描述】:

Microsoft Windows 10 附带 Microsoft Print To PDF 打印机,可以将内容打印到 PDF 文件。它会提示下载文件名。

如何从 C# 以编程方式控制它,以不提示输入 PDF 文件名,而是保存到我提供的某个文件夹中的特定文件名?

这用于以编程方式将大量文档或其他类型的文件打印到 PDF 的批处理。

【问题讨论】:

为您发布了一个可行的解决方案。让我知道你的想法:) 如果微软在他们的软件中开箱即用地提供这种选项(自动命名功能),这将是多么简单和巨大的帮助。 查看这个答案:***.com/a/58566537/1469494 【参考方案1】:

您可以使用PrintOut 方法并指定第四个输出文件名参数来打印到Windows 10 PDF 打印机,如下例所示:

/// <summary>
/// Convert a file to PDF using office _Document object
/// </summary>
/// <param name="InputFile">Full path and filename with extension of the file you want to convert from</param>
/// <returns></returns>
public void PrintFile(string InputFile)

    // convert input filename to new pdf name
    object OutputFileName = Path.Combine(
        Path.GetDirectoryName(InputFile),
        Path.GetFileNameWithoutExtension(InputFile)+".pdf"
    );


    // Set an object so there is less typing for values not needed
    object missing = System.Reflection.Missing.Value;

    // `doc` is of type `_Document`
    doc.PrintOut(
        ref missing,    // Background
        ref missing,    // Append
        ref missing,    // Range
        OutputFileName, // OutputFileName
        ref missing,    // From
        ref missing,    // To
        ref missing,    // Item
        ref missing,    // Copies
        ref missing,    // Pages
        ref missing,    // PageType
        ref missing,    // PrintToFile
        ref missing,    // Collate
        ref missing,    // ActivePrinterMacGX
        ref missing,    // ManualDuplexPrint
        ref missing,    // PrintZoomColumn
        ref missing,    // PrintZoomRow
        ref missing,    // PrintZoomPaperWidth
        ref missing,    // PrintZoomPaperHeight
    );

OutputFile 是您要转换的输入文档的完整路径字符串,而 doc 是常规文档对象。有关该文档的更多信息,请参阅_Document.PrintOut() 的以下 MSDN 链接

Office 2003 Office 2013 and later

示例中的PrintOut 会导致静默打印,当您通过指定的inputFile 打印到OutputFileName 时,该OutputFileName 将被放置在与原始文档相同的文件夹中,但它将是PDF 格式带有.pdf 扩展名。

【讨论】:

问题中没有迹象表明发布者使用的是 Office 产品。 @KenWhite,我只是通过研究和原始链接发现了这一点。通过添加当前链接来更新它,并重新格式化一些代码,以便无需访问链接即可轻松理解。链接仅供参考。 @SanuelJackson:我没有对链接或您的编辑说任何话。我的观点是,整个答案都是基于 OP 使用 Word、Excel 或自动化的前提,而在问题中没有任何迹象表明这种情况。 @KenWhite - 是的,我注意到了。刚刚发布了一个解决方案来解决 OP 的问题,因为无论如何我都在该地区:)。无论如何都要清理它,因为答案中并不清楚它是针对非办公问题的办公解决方案。由于它仍然与 c# 相关,并且确实有效,因此感觉它可以保留,但需要一点爱来清理它并明确它是用于办公室的。 :) Microsoft.Office.Tools.Word.Document.PrintOut docs.microsoft.com/en-us/dotnet/api/…【参考方案2】:

要使用 Microsoft Print to PDF 打印机打印PrintDocument 对象而不提示输入文件名,这里是执行此操作的纯代码方法:

// generate a file name as the current date/time in unix timestamp format
string file = (DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds.ToString();

// the directory to store the output.
string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

// initialize PrintDocument object
PrintDocument doc = new PrintDocument() 
    PrinterSettings = new PrinterSettings() 
        // set the printer to 'Microsoft Print to PDF'
        PrinterName = "Microsoft Print to PDF",

        // tell the object this document will print to file
        PrintToFile = true,

        // set the filename to whatever you like (full path)
        PrintFileName = Path.Combine(directory, file + ".pdf"),
    
;

doc.Print();

您也可以将此方法用于其他另存为文件类型的打印机,例如Microsoft XPS打印机

【讨论】:

如何通过 Microsoft Print To PDF 使用它重新打印现有的 PDF,例如在 PDF 中“烘焙”注释? @AndrewTruckle - 原理是一样的。选择 PDF 虚拟打印机,然后正常打印到它,尽管我想在 C++ 中可能有更好的方法来完成相同的任务。虽然上面的代码有效,但我确实觉得它相当慢。 @KraangPrime,我使用了这种方法。它提供了一个文件,但我无法打开它,因为 Adob​​e Reader 说文件已损坏。但是如果我不使用PrinterSettings,那么它会弹出浏览目标位置和文件名,然后我可以访问该文件。我错过了什么吗..? 这里输入的文件在哪里?除非我们订阅PrintPage 事件并在那里进行图形操作,否则这不起作用,至少对我来说这似乎非常复杂。也许我只是错过了什么? 打印一个空文件?我没有看到您在文件中添加任何内容的位置。

以上是关于Microsoft print to pdf 现在打印的pdf无法复制搜索怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

如何添加Microsoft Print To PDF打印机

您可以使用 Microsoft Print to PDF 打印机将 XPS 转换为 PDF 文件吗?

如何使用 Windows 10 附带的 Microsoft Print To PDF 打印机以编程方式打印到 PDF 文件而不提示 C# 中的文件名

如何在无头 Chrome 中更改纸张尺寸 --print-to-pdf

chrome print to pdf不适用于文件

How to print Mercedes WIS as print PDF