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); } } } }
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); }
/// <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); }