Hi.
I open pdf via PDFStream.
public class DecryptPdfStream : PDFStream
{
public const int BLOCK_SIZE = 4096;
private Stream m_stream = null;
private char m_key;
private bool m_fix = false;
public void Open(Stream stream, String key)
{
m_stream = stream;
m_key = key.ToCharArray();
string type_name = m_stream.GetType().ToString();
m_fix = (type_name.LastIndexOf("NativeFileStream") > 0);
}
public bool Writeable()
{
if (m_stream == null) return false;
return m_stream.CanWrite;
}
public long GetLength()
{
if (m_stream == null) return 0;
return m_stream.Length;
}
public long GetPosition()
{
if (m_stream == null) return 0;
return m_stream.Position;
}
public bool SetPosition(long pos)
{
if (m_stream == null) return false;
string type_name = m_stream.GetType().ToString();
if (m_fix)
{
ulong uoffset = (ulong)pos;
ulong fix = ((uoffset & 0xffffffffL) << 32) | ((uoffset & 0xffffffff00000000L) >> 32);
m_stream.Seek((long)fix, SeekOrigin.Begin);
}
else
m_stream.Seek(pos, SeekOrigin.Begin);
return true;
}
public int Read(byte buf)
{
if (m_stream == null) return 0;
int read = m_stream.Read(buf, 0, buf.Length);
return read;
// read encrypted pdf...
}
public int Write(byte buf)
{
if (m_stream == null) return 0;
long prev = m_stream.Position;
m_stream.Write(buf, 0, buf.Length);
return (int)(m_stream.Position - prev);
}
public void Close()
{
if (m_stream != null)
{
m_stream.Dispose();
m_stream = null;
}
}
public void Flush()
{
if (m_stream != null)
m_stream.Flush();
}
}
if (file != null)
{
IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite);
if (stream != null)
{
DecryptPdfStream decryptPdfStream = new DecryptPdfStream();
string accessToken = App.RestUserRepository.User.AccessToken;
string key = accessToken.Substring(0, 16);
decryptPdfStream.Open(stream.AsStream(), key);
return decryptPdfStream;
}
}
...
m_doc = new PDFDoc();
PDF_ERROR err = m_doc.OpenStream(m_stream, "");
m_view.vOpen(m_doc, 4, 0xFFCCCCCC, this);
I am successfully creating an annotation with text highlighting. I can save pdf with changes. But I cannot remove annotations
public void OnPDFAnnotClicked(PDFPage page, PDFAnnot annot)
{
m_view.vAnnotRemove(); or annot.RemoveFromPage();
}
I am getting unhandled exception.
System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'
I also tried to work with non-encrypted pdfs using a stream. The same error.