- Home /
SharpPdf C# generation and display
Hello,
I was trying to figure out how to generate and display a pdf in a Unity app. I would like the app, and pdf to be available for iOS, Android and web app. Following this tutorial I was able to generate a pdf file and store in the app main folder within the simulator.
http://www.devindia.biz/unity-pdf-generation-with-sharppdf-plugin/
Unfortunately when I try to open the pdf inside the app using
Application.OpenURL("FILE://" + path);
It does not work.
I also tried iTextSharp with poor outcome and I believe it is not free anymore.
Any suggestion would be more than welcome.
Thanx
UPDATE
I partially solved the problem:
I was able to generate the .pdf file in Unity Editor and in Standalone application on OSX. I realized I had trouble on storing/loading files in Unity.
// this is working on Editor. Application.dataPath are reached by the application and files are stored in Assets/StreamingAssets folder under project in Editor
#if UNITY_EDITOR || UNITY_EDITOR_64
myDoc.createPDF(Application.dataPath + "/StreamingAssets/" + attacName);
myTable = null;
#endif
// This is working on Mac standalone application. The file is correctly saved under Application.app/Contents folder
#if UNITY_STANDALONE
myDoc.createPDF(Application.dataPath + "/" + attacName);
myTable = null;
#endif
The code to retrieve and open the file:
public void openPdf() {
string path;
// tested working on mac
#if UNITY_EDITOR || UNITY_EDITOR_64
path = "file:" +Application.dataPath + "/StreamingAssets/" + attacName;
#endif
#if UNITY_STANDALONE
path = "file:" +Application.dataPath + "/" + attacName;
#endif
Application.OpenURL(path);
Debug.Log ("Button Clicked");
}
So far everything works perfectly.
The pain comes with ios.
I was able to generate a pdf file with the above code in Application.persistentDataPath and getting it back from iTunes (to verify it was created) enabling UIFileSharingEnabled under info.plist. Here's the code:
#if UNITY_IOS
myDoc.createPDF(Application.persistentDataPath + "/" + attacName);
myTable = null;
#endif
The trouble is when I try to Application.OpenUrl(path). It seems that c# code is blind to Application.persistentDataPath. Which by the way is /var/mobile/Containers/Data/Application/"ApplicationName"/Documents/"pdfName".pdf using
path = "file://" + Application.persistentDataPath + "/" + attacName;
Application.OpenURL(path);
I tried also to save the file in StreamingAssets folder but Xcode didn't like it:
UnauthorizedAccessException: Access to the path "/private/var/mobile/Containers/Bundle/Application/F105683E-B2EA-4B0C-81B7-61302C58D56C/PdfReader.app/Data/newPDF.pdf" is denied. at Mono.Security.Cryptography.RSAManaged.GenerateKeyPair () [0x00000] in :0 at System.IO.FileStream..ctor (System.String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean anonymous, FileOptions options) [0x00000] in :0 at System.IO.FileStream..ctor (System.String path, FileMode mode) [0x00000] in :0 at sharpPDF.pdfDocument.createPDF (System.String outputFile) [0x00000] in :0 at simplepdf+c__Iterator1.MoveNext () [0x00000] in :0
(Filename: currently not available on il2cpp Line: -1)
I then decided to get this wrapper
https://www.assetstore.unity3d.com/en/#!/content/17591
but it can only copy already formatted pdf file from StreamingAssets folder to /Raw folder on iOS device.
I am thinking I have to write my own wrapper to load data from Application.persistentDataPath on iOS, have you got any suggestion to start with?
Thank you again.
Answer by fashrista · Oct 24, 2018 at 12:40 PM
@ DottorFeelgood I donno if this helps, but on android I had to add a AndroidManifest.xml with all the permisions. It goes like this:
<activity android:name="com.unity3d.player.UnityPlayerActivity" android:label="@string/app_name" android:screenOrientation="sensorLandscape" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
Answer by MadhurSalvi · Jun 21, 2019 at 10:36 AM
I know I am posting offtopic question here , since i was unable to find any post regarding the sharp pdf with unity3d I am using the sharp pdf package with unity3d and i am facing difficulties for windows platform like: 1. How to dynamically increase the column height according to the text size at runtime. 2. How do i insert an image without using the co-routine function. 3. How to dynamically write the data on the new page if current page is filled and data is still pending. For example, there are 50 rows in my table at runtime and one first page 30rows occupy the space, then how do i dynamically write the remaining 20 rows on second page. 4. Instead of storing the file in root folder, in assets folder , how can i store the pdf at different location by selecting the folder from the system.
Can anyone please help me out, it would be great help....Thank you in advance.
Your answer
Follow this Question
Related Questions
Multiple Cars not working 1 Answer
Distribute terrain in zones 3 Answers
Making a bubble level (not a game but work tool) 1 Answer
An OS design issue: File types associated with their appropriate programs 1 Answer
How can I create a PDF while playing my games build and then display it to the player ? 1 Answer