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.

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

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.

@ 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>

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.