示例#1
0
        private void OutputText(IPdfTerm textTerms)
        {
            var textTermsList = textTerms switch {
                PdfArray termsArray => textTerms as PdfArray,
                PdfAtom textLiteral => new PdfArray {
                    textLiteral
                },
                _ => throw new Exception("Invalid term type")
            };

            var stringAtoms = textTermsList.Where(t => {
                var atom = t as PdfAtom;
                return(atom.Type == TokenType.HexString || atom.Type == TokenType.String);
            });

            if (stringAtoms.Any())
            {
                foreach (var atomTerm in stringAtoms)
                {
                    var atom = atomTerm as PdfAtom;

                    if (atom.Type == TokenType.String)
                    {
                        lineBuffer.Append(atom.AsString());
                    }
                    else
                    {
                        string decodedText = currentFont.DecodeString(atom.AsString());
                        lineBuffer.Append(decodedText);
                    }
                }
            }
        }
示例#2
0
        public void TestObjectTermsParsing()
        {
            var sourceList = new List <string>(ComplexObjectContent.Split("\r\n"));
            var streamer   = TokenStreamer.CreateFromList(sourceList);
            var parser     = new ObjectParser(streamer);

            IPdfTerm term = parser.ReadSingleObject();

            Assert.IsType <PdfArray>(term);

            var firstArrayElement = (term as PdfArray)[0];

            Assert.IsType <PdfDictionary>(firstArrayElement);
        }
示例#3
0
        /// <summary>
        /// Read PDF command and fill it's parameters list
        /// </summary>
        /// <param name="parameters">Command's parameters list</param>
        /// <returns>Command name</returns>
        public PdfAtom ReadNextCommand(IList <IPdfTerm> parameters)
        {
            bool     commandRead = false;
            IPdfTerm parsedTerm  = null;

            while (!commandRead)
            {
                parsedTerm  = ParseTerm();
                commandRead = (parsedTerm == null) ||
                              (parsedTerm is PdfAtom atom && atom.Type == TokenType.Id);

                if (!commandRead)
                {
                    parameters.Add(parsedTerm);
                }
            }

            return(parsedTerm as PdfAtom);
        }