示例#1
0
        private static void Initialize(PdfLibWrapper pdf, string pdfFileName)
        {
            var options = new StringBuilder();

            options.Append("compatibility={1.5}");
            options.Append(" inmemory=false");
            options.Append(" linearize=true");
            options.Append(" optimize=true");
            options.Append(" viewerpreferences={hidemenubar=false hidetoolbar=false hidewindowui=false}");
            options.Append(" destination {type fitwindow page 1}");
            options.Append($"");
            options.Append($"");

            var createDocumentResult = pdf.begin_document(pdfFileName, options.ToString());

            if (createDocumentResult != 1)
            {
                throw new Exception($"PDFLib failed to create file '{pdfFileName}'");
            }

            var defaultExtGState = pdf.create_gstate("blendmode=Normal opacityfill=1 opacitystroke=1 overprintmode=1 renderingintent=RelativeColorimetric");

            pdf.set_info("Creator", "Xpresso [http://www.albelli.com]");
            pdf.set_info("Title", "XpressoLight");
        }
示例#2
0
        private static void GeneratePap720Pdf(PdfLibWrapper pdf)
        {
            var sourceFilePath = @"base_source.pdf";
            var layout         = LayoutRepository.GetAll().Single(l => l.PapCode == 720);

            pdf.begin_page_ext(layout.SheetWidth, layout.SheetHeight, string.Empty);

            foreach (var page in layout.Pages)
            {
                var sourcePdf = pdf.open_pdi_document(sourceFilePath, string.Empty);

                var pdfPage = pdf.open_pdi_page(sourcePdf, 1, "");
                // todo: move mirroring setting to Layout
                pdf.fit_pdi_page(pdfPage, 0, 0, $"boxsize={{{page.Width} {page.Height}}} fitmethod=meet scale={{-1 1}}");
                pdf.close_pdi_page(pdfPage);

                foreach (var pageElement in page.Elements)
                {
                    pdf.setcolor("stroke", "rgb", 1.0, 1.0, 0.0, 0.0);
                    pdf.rect(pageElement.Left, pageElement.Bottom, pageElement.Width, pageElement.Height);
                    pdf.stroke();

                    var fontHandle = pdf.load_font(pageElement.Resource.FontName, "unicode", "errorpolicy=return");
                    pdf.setfont(fontHandle, pageElement.Resource.FontSize);
                    pdf.fit_textline(
                        pageElement.Resource.FileName,
                        pageElement.Left,
                        pageElement.Bottom,
                        string.Empty);
                }
            }

            pdf.end_page_ext(string.Empty);
        }
示例#3
0
        private static void BuildPdf(PdfLibWrapper pdf, OutputFile outputFile)
        {
            foreach (var outputPage in outputFile.Pages)
            {
                pdf.begin_page_ext(outputFile.SheetSize.Width, outputFile.SheetSize.Height, string.Empty);

                foreach (var tile in outputPage.Tiles)
                {
                    var sourcePdf = pdf.open_pdi_document(tile.SourceFilePath, string.Empty);
                    // "pdiusebox=media" means that all content of the source pdf will be used, not only visible part (crop box), see pdflib api reference
                    var sourcePage = pdf.open_pdi_page(sourcePdf, tile.SourcePage.Number, "pdiusebox=media");

                    var matchboxString       = BuildPdfMatchboxString(tile.MediaBox, tile.CutBox, tile.SourcePage.CropBox);
                    var orientationString    = BuildPdfOrientationString(tile.MediaRotationAngle);
                    var boxsizeString        = BuildPdfBoxsizeString(tile.MediaBox);
                    var fitmethodString      = "fitmethod=clip"; // will cut everything that overflows fitbox boundaries
                    var tilePlacementOptions = $"{matchboxString} {boxsizeString} {orientationString} {fitmethodString}";

                    pdf.fit_pdi_page(sourcePage, tile.MediaBox.Left, tile.MediaBox.Bottom, tilePlacementOptions);

                    // todo: tech info
                    var font = pdf.load_font("Helvetica", "unicode", "");
                    pdf.setfont(font, 20);
                    pdf.fit_textline(matchboxString, tile.MediaBox.Left + 40, tile.MediaBox.Bottom + 30, string.Empty);

                    pdf.close_pdi_page(sourcePage);
                }

                pdf.end_page_ext(string.Empty);
            }
        }
示例#4
0
 private static void DrawTestPage(PdfLibWrapper pdf)
 {
     pdf.begin_page_ext(500, 500, string.Empty);
     pdf.setcolor("stroke", "rgb", 1.0, 0.0, 0.0, 0.0);
     pdf.rect(5, 5, 490, 490);
     pdf.stroke();
     pdf.end_page_ext(string.Empty);
 }
示例#5
0
        private static float GetPageRotationAngle(PdfLibWrapper pdf, int fileHandle, int page)
        {
            var objtype = pdf.pcos_get_string(fileHandle, $"type:pages[{page}]/Rotate");

            if (objtype == "number")
            {
                return((float)pdf.pcos_get_number(fileHandle, $"pages[{page}]/Rotate"));
            }

            return(0.0f);
        }
示例#6
0
        private static Box ReadBox(PdfLibWrapper pdf, int fileHandle, int page, string boxName)
        {
            var boxLeft   = (float)pdf.pcos_get_number(fileHandle, $"pages[{page}]/{boxName}[0]");
            var boxBottom = (float)pdf.pcos_get_number(fileHandle, $"pages[{page}]/{boxName}[1]");
            var boxRight  = (float)pdf.pcos_get_number(fileHandle, $"pages[{page}]/{boxName}[2]");
            var boxTop    = (float)pdf.pcos_get_number(fileHandle, $"pages[{page}]/{boxName}[3]");
            var box       = new Box {
                Left = boxLeft, Bottom = boxBottom, Width = boxRight - boxLeft, Height = boxTop - boxBottom
            };

            return(box);
        }
示例#7
0
        public string Generate(OutputFile outputFile)
        {
            var outputFileName = $"{DateTime.Now:yyyyMMdd-HHmmss}_test.pdf";
            var outputFilePath = Path.Combine(_outputDirectory, outputFileName);
            var pdf            = new PdfLibWrapper("W900205-010045-139339-E74DE2-79Q6F2");

            InitializeLikeXpresso(pdf, outputFilePath);

            BuildPdf(pdf, outputFile);

            pdf.end_document(string.Empty);

            return(outputFilePath);
        }
示例#8
0
        private static void DrawBarcode(PdfLibWrapper pdf)
        {
            pdf.begin_page_ext(500, 500, string.Empty);

            var fontHandle = pdf.load_font("Code-39-20", "unicode", "embedding=true errorpolicy=return");

            pdf.setfont(fontHandle, 20);
            pdf.fit_textline(
                "*X01882E2*",
                20,
                20,
                string.Empty);

            pdf.end_page_ext(string.Empty);
        }
示例#9
0
        private static SourcePage GetSourcePage(PdfLibWrapper pdf, int sourcePdf, int pageIndex)
        {
            var pageWidth     = (float)pdf.pcos_get_number(sourcePdf, $"pages[{pageIndex}]/width");
            var pageHeight    = (float)pdf.pcos_get_number(sourcePdf, $"pages[{pageIndex}]/height");
            var rotationAngle = GetPageRotationAngle(pdf, sourcePdf, pageIndex);

            return(new SourcePage
            {
                SheetSize = new Size {
                    Width = pageWidth, Height = pageHeight
                },
                RotationAngle = rotationAngle,
                //MediaBox = ReadBox(pdf, sourcePdf, pageIndex, "MediaBox"),
                CropBox = ReadBox(pdf, sourcePdf, pageIndex, "CropBox"),
                Number = pageIndex + 1
            });
        }
示例#10
0
        static void Main(string[] args)
        {
            var pdfFileName = "test.pdf";
            var pdf         = new PdfLibWrapper("W900205-010045-139339-E74DE2-79Q6F2");

            Initialize(pdf, pdfFileName);

            //DrawTestPage(pdf);
            //DrawSourcePdf(pdf);
            //DrawBarcode(pdf);
            GeneratePap720Pdf(pdf);

            pdf.end_document(string.Empty);

            Console.WriteLine("Done");
            Console.ReadKey();
        }
示例#11
0
        public SourceFile Get(int albumId)
        {
            var fileName     = $"9999.{albumId}.0.pdf";
            var fullFilePath = Path.Combine(_storageFolderPath, fileName);
            var pdf          = new PdfLibWrapper("W900205-010045-139339-E74DE2-79Q6F2");
            var sourcePdf    = pdf.open_pdi_document(fullFilePath, string.Empty);
            var pagesCount   = (int)pdf.pcos_get_number(sourcePdf, "length:pages");

            var file = new SourceFile {
                FileName = fullFilePath
            };

            for (var pageIndex = 0; pageIndex < pagesCount; pageIndex++)
            {
                file.Pages.Add(GetSourcePage(pdf, sourcePdf, pageIndex));
            }

            return(file);
        }
示例#12
0
        private static void DrawSourcePdf(PdfLibWrapper pdf)
        {
            var sourcePdf  = pdf.open_pdi_document("base_source.pdf", string.Empty);
            var pagesCount = pdf.pcos_get_number(sourcePdf, "length:pages");

            Console.WriteLine($"Pages count in source pdf: {pagesCount}");

            for (var pageNumber = 1; pageNumber <= pagesCount; pageNumber++)
            {
                var page = pdf.open_pdi_page(sourcePdf, pageNumber, "");

                pdf.begin_page_ext(500, 500, string.Empty);
                pdf.setcolor("stroke", "rgb", 1.0, 0.0, 0.0, 0.0);
                pdf.rect(5, 5, 490, 490);
                pdf.stroke();
                pdf.fit_pdi_page(page, 10, 10, "boxsize={480 480} fitmethod=entire");
                pdf.close_pdi_page(page);
                pdf.end_page_ext(string.Empty);
            }
        }
示例#13
0
 public static void DrawFilledBox(PdfLibWrapper pdf, double left, double bottom, double width, double height, Color color)
 {
     pdf.setcolor("fill", color.PdfColorSpace(), color.R / 255.0, color.G / 255.0, color.B / 255.0, 0);
     pdf.rect(left, bottom, width, height);
     pdf.fill();
 }