2

Unityアプリでpdfを生成して表示する方法を理解しようとしていました。アプリと pdf を iOS、Android、Web アプリで利用できるようにしたいと考えています。このチュートリアルに従って、pdf ファイルを生成し、シミュレーター内のアプリのメイン フォルダーに保存することができました。

http://www.devindia.biz/unity-pdf-generation-with-sharppdf-plugin/

残念ながら、アプリ内でpdfを開こうとすると

Application.OpenURL("FILE://" + path);

それは動作しません。

私も iTextSharp を試してみましたが、結果は良くありませんでした。もう無料ではないと思います。

どんな提案でも大歓迎です。

ありがとう

アップデート

だから私は先に進もうとしましたが、途中で立ち往生しています.Galloriniの変更されたSharpPDFプログラムを試してみました.生成されたpdfドキュメントは、「NewPDF.pdf」と呼ばれ、メインアプリケーションフォルダに保存されています. 実際、エディターでコードを実行すると、コードを見つけることができます。シンプルな gui ボタンを作成し、この c# コードを実行して void をアタッチして、提案としてドキュメントを表示しました。

public void openPdf(){
string path = Application.persistentDataPath + "/" + "newPDF.pdf";
Application.OpenURL(path);
Debug.log("Button Clicked");

}

ボタンをクリックしても、もちろんコンソール レコードのボタン クリック以外は何も起こりません。

Web プレーヤー用のプログラムをビルドすると、ApplicationOpenURL は機能しますが、pdf は生成されず、エディターによって以前に生成された pdf を表示できます...少し混乱しています。

Mac Osx 用のプログラムをビルドしても、何も起こりません。

iPhone では、Xcode コンソールから次のログを取得します。

-> applicationDidBecomeActive()
Requesting Resolution: 1920x1080
Init: screen size 1920x1080
Initializing Metal device caps
Initialize engine version: 5.1.2f1 (afd2369b692a)

Adding Image Length 0 HEIGTH :8 WIDTH :8
UnityEngine.Debug:Internal_Log(Int32, String, Object)
UnityEngine.Debug:Log(Object)
sharpPDF.c__Iterator0:MoveNext()

(Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 65)

UnauthorizedAccessException: Access to the path "/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)

Adding Image Length 0 HEIGTH :8 WIDTH :8
UnityEngine.Debug:Internal_Log(Int32, String, Object)
UnityEngine.Debug:Log(Object)
sharpPDF.c__Iterator0:MoveNext()

(Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 65)

UnauthorizedAccessException: Access to the path "/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)

Button Clicked
UnityEngine.Debug:Internal_Log(Int32, String, Object)
UnityEngine.Debug:Log(Object)
SimplePDF:openPdf()
UnityEngine.Events.UnityAction:Invoke()
UnityEngine.Events.InvokableCall:Invoke(Object[])
UnityEngine.Events.InvokableCallList:Invoke(Object[])
UnityEngine.Events.UnityEventBase:Invoke(Object[])
UnityEngine.Events.UnityEvent:Invoke()
UnityEngine.UI.Button:Press()
UnityEngine.UI.Button:OnPointerClick(PointerEventData)
UnityEngine.EventSystems.ExecuteEvents:Execute(IPointerClickHandler, BaseEventData)
UnityEngine.EventSystems.EventFunction`1:Invoke(ICancelHandler, BaseEventData)
UnityEngine.EventSystems.ExecuteEvents:Execute(GameObject, BaseEventData, EventFunction`1)
UnityEngine.EventSystems.TouchInputModule:ProcessTouchPress(PointerEventData, Boolean, Boolean)
UnityEngine.EventSystems.TouchInputModule:ProcessTouchEvents()
UnityEngine.EventSystems.TouchInputModule:Process()
UnityEngine.EventSystems.EventSystem:Update()

(Filename: /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineDebugBindings.gen.cpp Line: 65)

私は完全に混乱しています。助けてください。

もう一度サンクス。

更新 #2

問題を部分的に解決しました:

Unity エディターと OSX のスタンドアロン アプリケーションで .pdf ファイルを生成できました。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

ファイルを取得して開くコード:

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");

    }

これまでのところ、すべてが完璧に機能しています。

痛みはiosに付属しています。

Application.persistentDataPath で上記のコードを使用して PDF ファイルを生成し、(作成されたことを確認するために) iTunes から取得して、info.plist で UIFileSharingEnabled を有効にすることができました。コードは次のとおりです。

   #if UNITY_IOS 
      myDoc.createPDF(Application.persistentDataPath + "/" + attacName);
      myTable = null;
    #endif

問題は、Application.OpenUrl(path) をしようとしたときです。c# コードは Application.persistentDataPath を認識していないようです。ちなみに /var/mobile/Containers/Data/Application/"ApplicationName"/Documents/"pdfName".pdf を使用しています

path = "file://" + Application.persistentDataPath + "/" + attacName;
    Application.OpenURL(path);

また、ファイルを StreamingAssets フォルダーに保存しようとしましたが、Xcode は気に入らなかった:

UnauthorizedAccessException: パス「/private/var/mobile/Containers/Bundle/Application/F105683E-B2EA-4B0C-81B7-61302C58D56C/PdfReader.app/Data/newPDF.pdf」へのアクセスが拒否されました。Mono.Security.Cryptography.RSAManaged.GenerateKeyPair () [0x00000] in :0 System.IO.FileStream..ctor (System.String パス、FileMode モード、FileAccess アクセス、FileShare 共有、Int32 bufferSize、ブール値の匿名、FileOptions オプション) [0x00000] in :0 at System.IO.FileStream..ctor (System.String パス、FileMode モード) [0x00000] in :0 at SharpPDF.pdfDocument.createPDF (System.String outputFile) [0x00000] in :0 at simplepdf+c__Iterator1.MoveNext () [0x00000] in :0

(ファイル名: 現在 il2cpp では利用できません 行: -1)

次に、このラッパーを取得することにしました

https://www.assetstore.unity3d.com/en/#!/content/17591

ただし、すでにフォーマットされている pdf ファイルを StreamingAssets フォルダーから iOS デバイスの /Raw フォルダーにコピーすることしかできません。

iOS で Application.persistentDataPath からデータをロードするには、独自のラッパーを作成する必要があると考えています。何か提案はありますか?

ありがとうございました。

4

0 に答える 0