word转PDF,保护其中的图片不可被复制

有一个需求,使用aspose 从word转到PDF格式后,通过其他的PDF编辑工具,或者将PDF转换回word其中的图片可以被复制。

我希望pdf中的图片不能被复制,有没有办法能够实现?

@zou_yw 如果我理解正确的话,您需要禁用从文档中复制内容的功能。遗憾的是,使用 Aspose.Words 无法禁用复制选项。唯一的办法是使用 Aspose.Words 将 Word 转换为 PDF,然后使用 Aspose.Pdf 设置文档权限。

Document doc = new Document("input.docx");
doc.save("output.pdf");

DocumentPrivilege privilege = DocumentPrivilege.getForbidAll();
privilege.setChangeAllowLevel(1);
privilege.setAllowPrint(true);

PdfFileSecurity fileSecurity = new PdfFileSecurity();
fileSecurity.bindPdf("output.pdf");
fileSecurity.setPrivilege(privilege);
fileSecurity.save("output_privilege.pdf");

也许 Aspose.Pdf 团队能为您提供更多信息。

FYI @asad.ali

这样确实可以保护PDF,但是从PDF文件转换回WORD后依然可以提取出图片。

有没有什么办法,可以直接将word文件转换为纯图类型的PDF?

@zou_yw 您是指转换成图像质量较低的 PDF 格式吗?

不是的,类似PDF转图片,将word转换到PDF,这个pdf的每一页包括里面的文字是一整张图片;

@zou_yw 您可以使用此代码获取带有一组图像的 pdf 文件。

Document wordDoc = new Document("input.docx");

Document pdfDoc = new Document();
DocumentBuilder builder = new DocumentBuilder(pdfDoc);

ImageSaveOptions imageSaveOptions = new ImageSaveOptions(SaveFormat.Png);
for (int page = 0; page < wordDoc.PageCount; page++)
{
    using (MemoryStream imageStream = new MemoryStream())
    {
        imageSaveOptions.PageSet = new PageSet(page);
        wordDoc.Save(imageStream, imageSaveOptions);

        // Read the image from file, ensure it is disposed.
        using (Image image = Image.FromStream(imageStream))
        {
            // Insert a section break before each new page
            if (page != 0)
                builder.InsertBreak(BreakType.SectionBreakNewPage);

            // We want the size of the page to be the same as the size of the image.
            // Convert pixels to points to size the page to the actual image size.
            PageSetup ps = builder.PageSetup;
            ps.PageWidth = ConvertUtil.PixelToPoint(image.Width, image.HorizontalResolution);
            ps.PageHeight = ConvertUtil.PixelToPoint(image.Height, image.VerticalResolution);

            // Insert the image into the document and position it at the top left corner of the page.
            builder.InsertImage(
                image,
                RelativeHorizontalPosition.Page,
                0,
                RelativeVerticalPosition.TopMargin,
                0,
                ps.PageWidth,
                ps.PageHeight,
                WrapType.Through);
        }
    }
}

PdfSaveOptions saveOptions = new PdfSaveOptions();
saveOptions.EmbedFullFonts = true;
saveOptions.UseCoreFonts = true;
saveOptions.DownsampleOptions.DownsampleImages = false;

pdfDoc.Save("output.pdf", saveOptions);