Skip to content

Commit

Permalink
- fix \r\n issues
Browse files Browse the repository at this point in the history
  • Loading branch information
Tiefseetauchner committed Sep 10, 2024
1 parent 4ade39f commit 6a888de
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
1 change: 1 addition & 0 deletions Pdfer/IStreamHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,5 @@ public interface IStreamHelper
Task<string> ReadReverseLine(StreamReader streamReader);
Task<byte[]> ReadStreamTo(string s, Stream stream);
char ReadChar(Stream stream);
Task<byte[]> SkipWhiteSpaceCharacters(Stream stream);
}
4 changes: 3 additions & 1 deletion Pdfer/Objects/PdfObjectReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ public class PdfObjectReader(
IDocumentObjectReader<NameObject> nameObjectReader,
IDocumentObjectReader<ArrayObject> arrayObjectReader) : IPdfObjectReader
{
// TODO (lena): Deal with NameObjects
// TODO (lena): Deal with BooleanObjects
// TODO (lena): Deal with NullObjects
public async Task<DocumentObject> Read(Stream stream, XRefEntry xRefEntry, ObjectIdentifier objectIdentifier, IObjectRepository objectRepository)
Expand Down Expand Up @@ -44,6 +43,9 @@ public async Task<DocumentObject> Read(Stream stream, XRefEntry xRefEntry, Objec
{
// IMPROVE (lena): This is not a good way to check if it is a stream. We're reading the whole dictionary twice.
await pdfDictionaryHelper.ReadDictionary(stream);

await streamHelper.SkipWhiteSpaceCharacters(stream);

var buffer = new byte[7];
_ = await stream.ReadAsync(buffer);
var contentAfterDictionary = Encoding.ASCII.GetString(buffer);
Expand Down
16 changes: 16 additions & 0 deletions Pdfer/StreamHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,20 @@ public async Task<byte[]> ReadStreamTo(string s, Stream stream)

public char ReadChar(Stream stream) =>
(char)stream.ReadByte();

public async Task<byte[]> SkipWhiteSpaceCharacters(Stream stream)
{
using var rawBytes = new MemoryStream();

var buffer = new byte[1];

while (stream.Read(buffer) == 1 && char.IsWhiteSpace((char)buffer[0]) || buffer[0] == '\r' || buffer[0] == '\n')
{
await rawBytes.WriteAsync(buffer);
}

stream.Position--;

return rawBytes.ToArray();
}
}

0 comments on commit 6a888de

Please sign in to comment.