为有中文需求的客户提供多渠道中文技术支持.

Fri Aug 18, 2023 1:30 am

您好,

我想把PDF檔平面化(變成唯讀不可編輯移動)
所以將PDF檔案一頁一頁讀取後加至另一個新建立的PDF檔,
但是新的檔案大小就會變成2倍大,
不知是否有解?謝謝。
我使用的版本是7.10.0

用以下程式:
PdfPageBase newPage = newPdf.Pages.Add(A4Size, new PdfMargins());
newPage.Canvas.DrawTemplate(page.CreateTemplate(), new PointF(0, 0), A4Size);

謝謝!

GAGATSENG
 
Posts: 5
Joined: Mon Sep 06, 2021 2:24 am

Fri Aug 18, 2023 5:53 am

您好,
感謝您的諮詢。
根據您的描述,您不需要讀取每一頁數據然後繪製到新的檔案中。 您可以直接加載檔案,設定許可權後將檔案另存即可。 我使用最新的版本以及新版本添加的介面進行測試,沒有複現您提到的問題,檔案和程式碼已附上供您參攷。 如果我沒有理解到您的問題,麻煩您提供一下您的測試檔案和完整的測試程式碼您可以通過郵件發送給我們 (support@e-iceblue.com)或者附加在該貼中,您也可以陞級到最新版本然後進行測試,感謝您的幫助與理解。

Code: Select all
PdfDocument pdf = new PdfDocument();
pdf.LoadFromFile("test.pdf");
// 设置打开密码和权限密码
PdfSecurityPolicy securityPolicy = new PdfPasswordSecurityPolicy("", "456");
securityPolicy.DocumentPrivilege = PdfDocumentPrivilege.ForbidAll;
pdf.Encrypt(securityPolicy);
pdf.SaveToFile("result.pdf");

Best regards,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Fri Aug 18, 2023 6:34 am

謝謝您的答覆,
請問有維持在7.10.0版本的前提下,
不設定密碼或是將檔案變小的方式嗎?

謝謝您!

GAGATSENG
 
Posts: 5
Joined: Mon Sep 06, 2021 2:24 am

Fri Aug 18, 2023 8:21 am

您好,
感謝您的迴響。
如果您想使檔案不可編輯,是需要進行許可權密碼設定的,您可以在Adobe Acrobat reader中進行測試。 如果您想將檔案變小並且維持在7.10版本,您可以使用如下的程式碼。
Code: Select all
static void Main(string[] args)
{

    //加载文档
    PdfDocument doc = new PdfDocument();
    doc.LoadFromFile(@"CompressDocument.pdf");
    //压缩文档内容
    CompressContent(doc);

    //压缩文档内的图片
    CompressImage(doc);


    doc.SaveToFile("CompressDocument_result.pdf");

}

private static void CompressContent(PdfDocument doc)
{
   
    doc.FileInfo.IncrementalUpdate = false;

    //设置压缩级别
    doc.CompressionLevel = PdfCompressionLevel.Best;
}

private static void CompressImage(PdfDocument doc)
{
   
    doc.FileInfo.IncrementalUpdate = false;

    // 压缩图片
    foreach (PdfPageBase page in doc.Pages)
    {
        if (page != null)
        {
            PdfImageHelper helper = new PdfImageHelper();
            Spire.Pdf.Utilities.PdfImageInfo[] pdfImageInfos = helper.GetImagesInfo(page);
            if (pdfImageInfos != null)
            {
                for (int i = 0; i < pdfImageInfos.Length; i++)
                {
                    page.TryCompressImage(i);
                }
            }
        }
    }
}


如果我的程式碼沒有滿足您的需求或者您還有其他的問題,麻煩您提供更詳細的說明和檔案。

Best regards,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Mon Aug 21, 2023 7:49 am

您好,
我使用您給的code,
doc.FileInfo.IncrementalUpdate = false;
//设置压缩级别
doc.CompressionLevel = PdfCompressionLevel.Best;
檔案沒有變小,

PdfImageHelper 只有最新版本的才可以用...而且我用最新版本測試檔案也沒有變小...

GAGATSENG
 
Posts: 5
Joined: Mon Sep 06, 2021 2:24 am

Mon Aug 21, 2023 8:59 am

您好,

感謝您的迴響。
麻煩您提供一下您的測試程式碼以及測試檔案,以及具體描述一下您的需求,這樣我們能更好理解您的問題並給出對應的解決方案。 測試檔案和程式碼您可以通過郵件發送給我們( support@e-iceblue.com )或者附加在該貼中。 感謝您的幫助與理解。

Best regards,
Triste
E-iceblue support team
User avatar

Triste.Dai
 
Posts: 1000
Joined: Tue Nov 15, 2022 3:59 am

Return to 中文技术支持