Browse Source

Merge pull request #22922 from abpframework/issue-6542

Improve pdf download
pull/23079/head
Halil İbrahim Kalkan 8 months ago
committed by GitHub
parent
commit
717598a46c
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 6
      Directory.Packages.props
  2. 16
      modules/docs/Volo.Docs.abpmdl
  3. 1
      modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj
  4. 9
      modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs
  5. 15
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentPdfAdminAppService.cs
  6. 7
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json
  7. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json
  8. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json
  9. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json
  10. 7
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/el.json
  11. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json
  12. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json
  13. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/es.json
  14. 7
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fi.json
  15. 7
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fr.json
  16. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hi.json
  17. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hr.json
  18. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/is.json
  19. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json
  20. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json
  21. 7
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json
  22. 7
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pt-BR.json
  23. 7
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json
  24. 9
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ru.json
  25. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sk.json
  26. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json
  27. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sv.json
  28. 7
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json
  29. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/vi.json
  30. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json
  31. 5
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json
  32. 4
      modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/IProjectAdminAppService.cs
  33. 1
      modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj
  34. 41
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/BackgroundJobs/DocumentPdfGenerateJob.cs
  35. 13
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/BackgroundJobs/DocumentPdfGenerateJobArgs.cs
  36. 4
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/DocsAdminApplicationModule.cs
  37. 64
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentPdfAdminAppService.cs
  38. 20
      modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs
  39. 61
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/DocumentPdfAdminClientProxy.Generated.cs
  40. 7
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/DocumentPdfAdminClientProxy.cs
  41. 16
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/ProjectsAdminClientProxy.Generated.cs
  42. 460
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/docs-admin-generate-proxy.json
  43. 1199
      modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/docs-admin-generate-proxy.json
  44. 60
      modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentPdfAdminController.cs
  45. 14
      modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs
  46. 68
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/GeneratePdf.cshtml
  47. 33
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/GeneratePdf.cshtml.cs
  48. 2
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/ManagePdfFiles.cshtml
  49. 54
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/generatePdf.js
  50. 23
      modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/managePdfFiles.js
  51. 2
      modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.abppkg
  52. 60
      modules/docs/src/Volo.Docs.Admin.Web/wwwroot/client-proxies/docs-admin-proxy.js
  53. 3
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo.Docs.Common.Application.Contracts.abppkg
  54. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonPermissionDefinitionProvider.cs
  55. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonPermissions.cs
  56. 12
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Documents/IDocumentPdfAppService.cs
  57. 10
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Documents/IDocumentPdfGeneratorAppService.cs
  58. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/ar.json
  59. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/cs.json
  60. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/de-DE.json
  61. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/de.json
  62. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/el.json
  63. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/en-GB.json
  64. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/en.json
  65. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/es.json
  66. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/fi.json
  67. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/fr.json
  68. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hi.json
  69. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hr.json
  70. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hu.json
  71. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/is.json
  72. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/it.json
  73. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/nl.json
  74. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/pl-PL.json
  75. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/pt-BR.json
  76. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/ro-RO.json
  77. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/ru.json
  78. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/sk.json
  79. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/sl.json
  80. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/sv.json
  81. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/tr.json
  82. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/vi.json
  83. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json
  84. 2
      modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json
  85. 3
      modules/docs/src/Volo.Docs.Common.Application/Volo.Docs.Common.Application.abppkg
  86. 55
      modules/docs/src/Volo.Docs.Common.Application/Volo/Docs/Common/Documents/DocumentPdfAppService.cs
  87. 52
      modules/docs/src/Volo.Docs.Common.Application/Volo/Docs/Common/Documents/DocumentPdfGeneratorAppService.cs
  88. 16
      modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/DocsDocumentPdfClientProxy.Generated.cs
  89. 7
      modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/DocsDocumentPdfClientProxy.cs
  90. 0
      modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/DocsProjectClientProxy.Generated.cs
  91. 0
      modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/DocsProjectClientProxy.cs
  92. 7
      modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/Volo/Docs/Documents/DocsDocumentPdfGeneratorClientProxy.cs
  93. 102
      modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/docs-common-generate-proxy.json
  94. 15
      modules/docs/src/Volo.Docs.Common.HttpApi.Client/Volo.Docs.Common.HttpApi.Client.abppkg
  95. 3
      modules/docs/src/Volo.Docs.Common.HttpApi/Volo.Docs.Common.HttpApi.abppkg
  96. 37
      modules/docs/src/Volo.Docs.Common.HttpApi/Volo/Docs/Documents/DocsDocumentPdfController.cs
  97. 32
      modules/docs/src/Volo.Docs.Common.HttpApi/Volo/Docs/Documents/DocsDocumentPdfGeneratorController.cs
  98. 6
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/BlobProjectPdfFileStore.cs
  99. 11
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/DocsProjectPdfGeneratorOptions.cs
  100. 2
      modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IHtmlToPdfRenderer.cs

6
Directory.Packages.props

@ -34,9 +34,9 @@
<PackageVersion Include="DistributedLock.Core" Version="1.0.8" />
<PackageVersion Include="DistributedLock.Redis" Version="1.0.3" />
<PackageVersion Include="DeepL.net" Version="1.15.0" />
<PackageVersion Include="itext.bouncy-castle-adapter" Version="9.1.0" />
<PackageVersion Include="itext7" Version="9.1.0" />
<PackageVersion Include="itext7.pdfhtml" Version="6.1.0" />
<PackageVersion Include="itext.bouncy-castle-adapter" Version="9.2.0" />
<PackageVersion Include="itext7" Version="9.2.0" />
<PackageVersion Include="itext7.pdfhtml" Version="6.2.0" />
<PackageVersion Include="MongoSandbox.Core" Version="2.0.0" />
<PackageVersion Include="MongoSandbox8.runtime.linux-x64" Version="2.0.0" />
<PackageVersion Include="MongoSandbox8.runtime.osx-arm64" Version="2.0.0" />

16
modules/docs/Volo.Docs.abpmdl

@ -86,6 +86,22 @@
"Volo.Docs.MongoDB.Tests": {
"path": "test/Volo.Docs.MongoDB.Tests/Volo.Docs.MongoDB.Tests.abppkg",
"folder": "test"
},
"Volo.Docs.Common.Application": {
"path": "src/Volo.Docs.Common.Application/Volo.Docs.Common.Application.abppkg",
"folder": "src"
},
"Volo.Docs.Common.Application.Contracts": {
"path": "src/Volo.Docs.Common.Application.Contracts/Volo.Docs.Common.Application.Contracts.abppkg",
"folder": "src"
},
"Volo.Docs.Common.HttpApi": {
"path": "src/Volo.Docs.Common.HttpApi/Volo.Docs.Common.HttpApi.abppkg",
"folder": "src"
},
"Volo.Docs.Common.HttpApi.Client": {
"path": "src/Volo.Docs.Common.HttpApi.Client/Volo.Docs.Common.HttpApi.Client.abppkg",
"folder": "src"
}
}
}

1
modules/docs/app/VoloDocs.Web/VoloDocs.Web.csproj

@ -43,6 +43,7 @@
<ProjectReference Include="..\..\..\..\modules\account\src\Volo.Abp.Account.Web\Volo.Abp.Account.Web.csproj" />
<ProjectReference Include="..\..\..\..\modules\account\src\Volo.Abp.Account.Application\Volo.Abp.Account.Application.csproj" />
<ProjectReference Include="..\..\..\..\modules\account\src\Volo.Abp.Account.HttpApi\Volo.Abp.Account.HttpApi.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.BackgroundJobs\Volo.Abp.BackgroundJobs.csproj" />
</ItemGroup>

9
modules/docs/app/VoloDocs.Web/VoloDocsWebModule.cs

@ -32,6 +32,7 @@ using Localization.Resources.AbpUi;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Hosting;
using Volo.Abp.Account;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.BlobStoring;
using Volo.Abp.BlobStoring.Database;
using Volo.Abp.PermissionManagement.HttpApi;
@ -62,7 +63,8 @@ namespace VoloDocs.Web
typeof(AbpPermissionManagementApplicationModule),
typeof(AbpPermissionManagementHttpApiModule),
typeof(AbpAspNetCoreMvcUiBasicThemeModule)
,typeof(AbpCachingStackExchangeRedisModule)
,typeof(AbpCachingStackExchangeRedisModule),
typeof(AbpBackgroundJobsModule)
)]
public class VoloDocsWebModule : AbpModule
{
@ -72,6 +74,11 @@ namespace VoloDocs.Web
{
options.AddAssemblyResource(typeof(DocsResource), typeof(VoloDocsWebModule).Assembly);
});
PreConfigure<AbpBackgroundJobWorkerOptions>(options =>
{
options.ApplicationName = context.Services.GetApplicationName()!;
});
}
public override void ConfigureServices(ServiceConfigurationContext context)

15
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Documents/IDocumentPdfAdminAppService.cs

@ -0,0 +1,15 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Docs.Admin.Projects;
using Volo.Docs.Common.Documents;
namespace Volo.Docs.Admin.Documents;
public interface IDocumentPdfAdminAppService : IDocumentPdfAppService
{
Task GeneratePdfAsync(DocumentPdfGeneratorInput input);
Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input);
Task DeletePdfFileAsync(DeletePdfFileInput input);
}

7
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ar.json

@ -1,7 +1,7 @@
{
"culture": "ar",
"texts": {
"Permission:DocumentManagement": "إدارة الوثائق",
"Permission:DocumentManagement": "إدارة المستندات",
"Permission:Projects": "المشروعات",
"Permission:Edit": "تعديل",
"Permission:Delete": "حذف",
@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "توليد وتحميل PDF",
"PdfFileDeletionWarningMessage": "هل أنت متأكد أنك تريد حذف ملف PDF \"{0}\"?",
"ManagePdfFiles": "إدارة ملفات PDF",
"Permission:ManagePdfFiles": "إدارة ملفات PDF"
"Permission:ManagePdfFiles": "إدارة ملفات PDF",
"PdfDeletedSuccessfully": "تم حذف ملف PDF بنجاح",
"PdfGenerationStarted": "بدأ إنشاء ملف PDF",
"PdfGenerationStartedInfoMessage": "بدأ إنشاء ملف PDF. بمجرد اكتمال العملية، يمكنك التحقق مما إذا تمت إضافة الملف في قسم ملفات PDF."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/cs.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Generovat a stáhnout PDF",
"PdfFileDeletionWarningMessage": "Opravdu chcete odstranit soubor PDF \"{0}\"?",
"ManagePdfFiles": "Správa PDF souborů",
"Permission:ManagePdfFiles": "Správa PDF souborů"
"Permission:ManagePdfFiles": "Správa PDF souborů",
"PdfDeletedSuccessfully": "PDF soubor byl úspěšně smazán",
"PdfGenerationStarted": "Generování PDF bylo zahájeno",
"PdfGenerationStartedInfoMessage": "Generování PDF bylo zahájeno. Po dokončení můžete zkontrolovat, zda byl soubor přidán do sekce PDF souborů."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de-DE.json

@ -65,6 +65,9 @@
"GenerateAndDownloadPdf": "PDF generieren und herunterladen",
"PdfFileDeletionWarningMessage": "Sind Sie sicher, dass Sie das PDF-Datei \"{0}\" löschen wollen?",
"ManagePdfFiles": "PDF-Dateien verwalten",
"Permission:ManagePdfFiles": "PDF-Dateien verwalten"
"Permission:ManagePdfFiles": "PDF-Dateien verwalten",
"PdfDeletedSuccessfully": "PDF-Datei wurde erfolgreich gelöscht",
"PdfGenerationStarted": "PDF-Generierung wurde gestartet",
"PdfGenerationStartedInfoMessage": "Die PDF-Generierung wurde gestartet. Nach Abschluss können Sie überprüfen, ob die Datei im PDF-Dateibereich hinzugefügt wurde."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/de.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "PDF generieren und herunterladen",
"PdfFileDeletionWarningMessage": "Sind Sie sicher, dass Sie das PDF-Datei \"{0}\" löschen wollen?",
"ManagePdfFiles": "PDF-Dateien verwalten",
"Permission:ManagePdfFiles": "PDF-Dateien verwalten"
"Permission:ManagePdfFiles": "PDF-Dateien verwalten",
"PdfDeletedSuccessfully": "PDF-Datei wurde erfolgreich gelöscht",
"PdfGenerationStarted": "PDF-Generierung gestartet",
"PdfGenerationStartedInfoMessage": "Die PDF-Generierung wurde gestartet. Nach Abschluss können Sie überprüfen, ob die Datei im PDF-Dateibereich hinzugefügt wurde."
}
}

7
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/el.json

@ -1,7 +1,7 @@
{
"culture": "el",
"texts": {
"Permission:DocumentManagement": "Διαχείρηση αρχείων",
"Permission:DocumentManagement": "Διαχείριση εγγράφων",
"Permission:Projects": "Εργα",
"Permission:Edit": "Επεξεργασία",
"Permission:Delete": "Διαγραφή",
@ -65,6 +65,9 @@
"GenerateAndDownloadPdf": "Δημιουργία και λήψη PDF",
"PdfFileDeletionWarningMessage": "Είστε βέβαιοι ότι θέλετε να διαγράψετε το PDF αρχείο \"{0}\";",
"ManagePdfFiles": "Διαχείρηση PDF αρχείων",
"Permission:ManagePdfFiles": "Διαχείρηση PDF αρχείων"
"Permission:ManagePdfFiles": "Διαχείρηση PDF αρχείων",
"PdfDeletedSuccessfully": "Το αρχείο PDF διαγράφηκε με επιτυχία",
"PdfGenerationStarted": "Η δημιουργία PDF ξεκίνησε",
"PdfGenerationStartedInfoMessage": "Η δημιουργία PDF ξεκίνησε. Μόλις ολοκληρωθεί, μπορείτε να ελέγξετε αν το αρχείο έχει προστεθεί στην ενότητα αρχείων PDF."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en-GB.json

@ -65,6 +65,9 @@
"GenerateAndDownloadPdf": "Generate and download PDF",
"PdfFileDeletionWarningMessage": "Are you sure you want to delete the PDF file \"{0}\"?",
"ManagePdfFiles": "Manage PDF files",
"Permission:ManagePdfFiles": "Manage PDF files"
"Permission:ManagePdfFiles": "Manage PDF files",
"PdfDeletedSuccessfully": "PDF file has been deleted successfully",
"PdfGenerationStarted": "PDF generation has started",
"PdfGenerationStartedInfoMessage": "PDF generation has started. Once completed, you can check if the file has been added to the PDF files section."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/en.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Generate and download PDF",
"PdfFileDeletionWarningMessage": "Are you sure you want to delete the PDF file \"{0}\"?",
"ManagePdfFiles": "Manage PDF files",
"Permission:ManagePdfFiles": "Manage PDF files"
"Permission:ManagePdfFiles": "Manage PDF files",
"PdfDeletedSuccessfully": "PDF file has been deleted successfully",
"PdfGenerationStarted": "PDF generation started",
"PdfGenerationStartedInfoMessage": "PDF generation has started. Once completed, you can check if the file has been added to the PDF files section."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/es.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Generar y descargar PDF",
"PdfFileDeletionWarningMessage": "¿Está seguro de querer eliminar el archivo PDF \"{0}\"?",
"ManagePdfFiles": "Administrar archivos PDF",
"Permission:ManagePdfFiles": "Administrar archivos PDF"
"Permission:ManagePdfFiles": "Administrar archivos PDF",
"PdfDeletedSuccessfully": "El archivo PDF se ha eliminado correctamente",
"PdfGenerationStarted": "Se inició la generación de PDF",
"PdfGenerationStartedInfoMessage": "La generación del PDF ha comenzado. Una vez completado, puede verificar si el archivo se ha agregado en la sección de archivos PDF."
}
}

7
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fi.json

@ -1,7 +1,7 @@
{
"culture": "fi",
"texts": {
"Permission:DocumentManagement": "Asiakirjojen hallinta",
"Permission:DocumentManagement": "Asiakirjahallinta",
"Permission:Projects": "Projektit",
"Permission:Edit": "Muokkaus",
"Permission:Delete": "Poisto",
@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Generoi ja lataa PDF",
"PdfFileDeletionWarningMessage": "Oletko varma, että haluat poistaa PDF-tiedoston \"{0}\"?",
"ManagePdfFiles": "Hallitse PDF-tiedostoja",
"Permission:ManagePdfFiles": "Hallitse PDF-tiedostoja"
"Permission:ManagePdfFiles": "Hallitse PDF-tiedostoja",
"PdfDeletedSuccessfully": "PDF-tiedosto poistettu onnistuneesti",
"PdfGenerationStarted": "PDF:n luonti on aloitettu",
"PdfGenerationStartedInfoMessage": "PDF:n luonti on aloitettu. Kun se on valmis, voit tarkistaa, onko tiedosto lisätty PDF-tiedostot-osioon."
}
}

7
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/fr.json

@ -1,7 +1,7 @@
{
"culture": "fr",
"texts": {
"Permission:DocumentManagement": "Gestion de documents",
"Permission:DocumentManagement": "Gestion des documents",
"Permission:Projects": "Projets",
"Permission:Edit": "Éditer",
"Permission:Delete": "Effacer",
@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Générer et télécharger PDF",
"PdfFileDeletionWarningMessage": "Êtes-vous sûr de vouloir supprimer le fichier PDF \"{0}\"?",
"ManagePdfFiles": "Gérer les fichiers PDF",
"Permission:ManagePdfFiles": "Gérer les fichiers PDF"
"Permission:ManagePdfFiles": "Gérer les fichiers PDF",
"PdfDeletedSuccessfully": "Le fichier PDF a été supprimé avec succès",
"PdfGenerationStarted": "La génération du PDF a commencé",
"PdfGenerationStartedInfoMessage": "La génération du PDF a commencé. Une fois terminé, vous pouvez vérifier si le fichier a été ajouté dans la section des fichiers PDF."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hi.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "PDF उत्पन्न और डाउनलोड करें",
"PdfFileDeletionWarningMessage": "क्या आप वाकई \"{0}\" के PDF फ़ाइल को हटाना चाहते हैं?",
"ManagePdfFiles": "PDF फ़ाइलें प्रबंधित करें",
"Permission:ManagePdfFiles": "PDF फ़ाइलें प्रबंधित करें"
"Permission:ManagePdfFiles": "PDF फ़ाइलें प्रबंधित करें",
"PdfDeletedSuccessfully": "PDF फ़ाइल सफलतापूर्वक हटा दी गई",
"PdfGenerationStarted": "PDF जनरेशन शुरू हो गया है",
"PdfGenerationStartedInfoMessage": "PDF जनरेशन शुरू हो गया है। पूरा होने के बाद, आप जांच सकते हैं कि फ़ाइल PDF फ़ाइल सेक्शन में जोड़ी गई है या नहीं।"
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/hr.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Generiraj i preuzmi PDF",
"PdfFileDeletionWarningMessage": "Jeste li sigurni da želite izbrisati PDF datoteku \"{0}\"?",
"ManagePdfFiles": "Upravljanje PDF datotekama",
"Permission:ManagePdfFiles": "Upravljanje PDF datotekama"
"Permission:ManagePdfFiles": "Upravljanje PDF datotekama",
"PdfDeletedSuccessfully": "PDF datoteka je uspješno izbrisana",
"PdfGenerationStarted": "Započelo je generiranje PDF-a",
"PdfGenerationStartedInfoMessage": "Započelo je generiranje PDF-a. Nakon završetka možete provjeriti je li datoteka dodana u odjeljak PDF datoteka."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/is.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Generate and download PDF",
"PdfFileDeletionWarningMessage": "Are you sure you want to delete the PDF file \"{0}\"?",
"ManagePdfFiles": "Manage PDF files",
"Permission:ManagePdfFiles": "Manage PDF files"
"Permission:ManagePdfFiles": "Manage PDF files",
"PdfDeletedSuccessfully": "PDF skrá var eytt með góðum árangri",
"PdfGenerationStarted": "PDF gerð hefur hafist",
"PdfGenerationStartedInfoMessage": "PDF gerð hefur hafist. Þegar henni er lokið geturðu athugað hvort skráin hafi verið bætt við í PDF skráarhlutanum."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/it.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Genera e scarica PDF",
"PdfFileDeletionWarningMessage": "Sei sicuro di voler eliminare il file PDF \"{0}\"?",
"ManagePdfFiles": "Gestione file PDF",
"Permission:ManagePdfFiles": "Gestione file PDF"
"Permission:ManagePdfFiles": "Gestione file PDF",
"PdfDeletedSuccessfully": "Il file PDF è stato eliminato con successo",
"PdfGenerationStarted": "La generazione del PDF è iniziata",
"PdfGenerationStartedInfoMessage": "La generazione del PDF è iniziata. Al termine, puoi verificare se il file è stato aggiunto nella sezione dei file PDF."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/nl.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "PDF genereren en downloaden",
"PdfFileDeletionWarningMessage": "Weet u zeker dat u het PDF-bestand \"{0}\" wilt verwijderen?",
"ManagePdfFiles": "PDF-bestanden beheren",
"Permission:ManagePdfFiles": "PDF-bestanden beheren"
"Permission:ManagePdfFiles": "PDF-bestanden beheren",
"PdfDeletedSuccessfully": "PDF-bestand is succesvol verwijderd",
"PdfGenerationStarted": "PDF-generatie is gestart",
"PdfGenerationStartedInfoMessage": "PDF-generatie is gestart. Na voltooiing kunt u controleren of het bestand is toegevoegd in de PDF-bestandssectie."
}
}

7
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pl-PL.json

@ -1,7 +1,7 @@
{
"culture": "pl-PL",
"texts": {
"Permission:DocumentManagement": "Zarządzanie dokumentacją",
"Permission:DocumentManagement": "Zarządzanie dokumentami",
"Permission:Projects": "Projekty",
"Permission:Edit": "Edytuj",
"Permission:Delete": "Usuń",
@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Generuj i pobierz PDF",
"PdfFileDeletionWarningMessage": "Czy na pewno chcesz usunąć plik PDF \"{0}\"?",
"ManagePdfFiles": "Zarządzanie plikami PDF",
"Permission:ManagePdfFiles": "Zarządzanie plikami PDF"
"Permission:ManagePdfFiles": "Zarządzaj plikami PDF",
"PdfDeletedSuccessfully": "Plik PDF został pomyślnie usunięty",
"PdfGenerationStarted": "Rozpoczęto generowanie PDF",
"PdfGenerationStartedInfoMessage": "Rozpoczęto generowanie PDF. Po zakończeniu możesz sprawdzić, czy plik został dodany w sekcji plików PDF."
}
}

7
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/pt-BR.json

@ -1,7 +1,7 @@
{
"culture": "pt-BR",
"texts": {
"Permission:DocumentManagement": "Gerenciar Documentos",
"Permission:DocumentManagement": "Gerenciamento de documentos",
"Permission:Projects": "Projetos",
"Permission:Edit": "Editar",
"Permission:Delete": "Excluir",
@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Gerar e baixar PDF",
"PdfFileDeletionWarningMessage": "Tem certeza de que deseja excluir o arquivo PDF \"{0}\"?",
"ManagePdfFiles": "Gerenciar arquivos PDF",
"Permission:ManagePdfFiles": "Gerenciar arquivos PDF"
"Permission:ManagePdfFiles": "Gerenciar arquivos PDF",
"PdfDeletedSuccessfully": "Arquivo PDF foi excluído com sucesso",
"PdfGenerationStarted": "A geração do PDF foi iniciada",
"PdfGenerationStartedInfoMessage": "A geração do PDF foi iniciada. Após a conclusão, você pode verificar se o arquivo foi adicionado na seção de arquivos PDF."
}
}

7
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ro-RO.json

@ -1,7 +1,7 @@
{
"culture": "ro-RO",
"texts": {
"Permission:DocumentManagement": "Administrarea documentelor",
"Permission:DocumentManagement": "Gestionare documente",
"Permission:Projects": "Proiecte",
"Permission:Edit": "Editează",
"Permission:Delete": "Şterge",
@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Generare și descărcare PDF",
"PdfFileDeletionWarningMessage": "Sunteți sigur(ă) că doriți să ștergeți fișierul PDF \"{0}\"?",
"ManagePdfFiles": "Gestionare fișiere PDF",
"Permission:ManagePdfFiles": "Gestionare fișiere PDF"
"Permission:ManagePdfFiles": "Gestionare fișiere PDF",
"PdfDeletedSuccessfully": "Fișierul PDF a fost șters cu succes",
"PdfGenerationStarted": "Generarea PDF-ului a început",
"PdfGenerationStartedInfoMessage": "Generarea PDF-ului a început. După finalizare, puteți verifica dacă fișierul a fost adăugat în secțiunea de fișiere PDF."
}
}

9
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/ru.json

@ -1,7 +1,7 @@
{
"culture": "ru",
"texts": {
"Permission:DocumentManagement": "Управление документацией",
"Permission:DocumentManagement": "Управление документами",
"Permission:Projects": "Проекты",
"Permission:Edit": "Редактировать",
"Permission:Delete": "Удалить",
@ -65,7 +65,10 @@
"PdfGeneratedSuccessfully": "PDF успешно сгенерирован",
"GenerateAndDownloadPdf": "Сгенерировать и скачать PDF",
"PdfFileDeletionWarningMessage": "Вы уверены, что хотите удалить файл PDF \"{0}\"?",
"ManagePdfFiles": "Управление файлами PDF",
"Permission:ManagePdfFiles": "Управление файлами PDF"
"ManagePdfFiles": "Управление PDF файлами",
"Permission:ManagePdfFiles": "Управление PDF файлами",
"PdfDeletedSuccessfully": "PDF файл успешно удален",
"PdfGenerationStarted": "Началась генерация PDF",
"PdfGenerationStartedInfoMessage": "Началась генерация PDF. После завершения вы можете проверить, добавлен ли файл в раздел PDF файлов."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sk.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Generovať a stiahnuť PDF",
"PdfFileDeletionWarningMessage": "Ste si istý, že chcete odstrániť súbor PDF \"{0}\"?",
"ManagePdfFiles": "Správa PDF súborov",
"Permission:ManagePdfFiles": "Správa PDF súborov"
"Permission:ManagePdfFiles": "Správa PDF súborov",
"PdfDeletedSuccessfully": "PDF súbor bol úspešne odstránený",
"PdfGenerationStarted": "Začala sa generácia PDF",
"PdfGenerationStartedInfoMessage": "Začala sa generácia PDF. Po dokončení môžete skontrolovať, či bol súbor pridaný v sekcii PDF súborov."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sl.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Generiraj in prenesi PDF",
"PdfFileDeletionWarningMessage": "Ali ste prepričani, da želite izbrisati datoteko PDF »{0}«?",
"ManagePdfFiles": "Upravljanje datotek PDF",
"Permission:ManagePdfFiles": "Upravljanje datotek PDF"
"Permission:ManagePdfFiles": "Upravljanje datotek PDF",
"PdfDeletedSuccessfully": "PDF datoteka je bila uspešno izbrisana",
"PdfGenerationStarted": "Začelo se je ustvarjanje PDF-ja",
"PdfGenerationStartedInfoMessage": "Začelo se je ustvarjanje PDF-ja. Ko bo končano, lahko preverite, ali je bila datoteka dodana v razdelek PDF datotek."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/sv.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Generate and download PDF",
"PdfFileDeletionWarningMessage": "Are you sure you want to delete the PDF file \"{0}\"?",
"ManagePdfFiles": "Manage PDF files",
"Permission:ManagePdfFiles": "Manage PDF files"
"Permission:ManagePdfFiles": "Manage PDF files",
"PdfDeletedSuccessfully": "PDF-filen har tagits bort",
"PdfGenerationStarted": "PDF-generering har påbörjats",
"PdfGenerationStartedInfoMessage": "PDF-generering har påbörjats. När den är klar kan du kontrollera om filen har lagts till i PDF-filsektionen."
}
}

7
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/tr.json

@ -1,7 +1,7 @@
{
"culture": "tr",
"texts": {
"Permission:DocumentManagement": "Döküman yönetimi",
"Permission:DocumentManagement": "Belge Yönetimi",
"Permission:Projects": "Projeler",
"Permission:Edit": "Düzenle",
"Permission:Delete": "Sil",
@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "PDF oluştur ve indir",
"PdfFileDeletionWarningMessage": "{0} PDF dosyasını silmek istediğinizden emin misiniz?",
"ManagePdfFiles": "PDF dosyalarını yönet",
"Permission:ManagePdfFiles": "PDF dosyalarını yönet"
"Permission:ManagePdfFiles": "PDF dosyalarını yönet",
"PdfDeletedSuccessfully": "PDF dosyası başarıyla silindi",
"PdfGenerationStarted": "PDF oluşturma başladı",
"PdfGenerationStartedInfoMessage": "PDF oluşturma işlemi başlatıldı. İşlem tamamlandığında, dosyanın PDF dosyaları bölümüne eklenip eklenmediğini kontrol edebilirsiniz."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/vi.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "Tạo và tải xuống PDF",
"PdfFileDeletionWarningMessage": "Bạn có chắc chắn muốn xóa tệp PDF \"{0}\" không?",
"ManagePdfFiles": "Quản lý tệp PDF",
"Permission:ManagePdfFiles": "Quản lý tệp PDF"
"Permission:ManagePdfFiles": "Quản lý tệp PDF",
"PdfDeletedSuccessfully": "Tệp PDF đã được xóa thành công",
"PdfGenerationStarted": "Bắt đầu tạo PDF",
"PdfGenerationStartedInfoMessage": "Quá trình tạo PDF đã bắt đầu. Sau khi hoàn thành, bạn có thể kiểm tra xem tệp đã được thêm vào phần tệp PDF chưa."
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "生成并下载PDF",
"PdfFileDeletionWarningMessage": "你确定要删除PDF文件“{0}”吗?",
"ManagePdfFiles": "管理PDF文件",
"Permission:ManagePdfFiles": "管理PDF文件"
"Permission:ManagePdfFiles": "管理PDF文件",
"PdfDeletedSuccessfully": "PDF文件已成功删除",
"PdfGenerationStarted": "PDF生成已开始",
"PdfGenerationStartedInfoMessage": "PDF生成已开始。完成后,您可以在PDF文件部分检查文件是否已添加。"
}
}

5
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json

@ -66,6 +66,9 @@
"GenerateAndDownloadPdf": "生成并下载PDF",
"PdfFileDeletionWarningMessage": "你確定要刪除PDF文件“{0}”嗎?",
"ManagePdfFiles": "管理PDF文件",
"Permission:ManagePdfFiles": "管理PDF文件"
"Permission:ManagePdfFiles": "管理PDF文件",
"PdfDeletedSuccessfully": "PDF文件已成功刪除",
"PdfGenerationStarted": "PDF生成已開始",
"PdfGenerationStartedInfoMessage": "PDF生成已開始。完成後,您可以在PDF文件部分檢查文件是否已添加。"
}
}

4
modules/docs/src/Volo.Docs.Admin.Application.Contracts/Volo/Docs/Admin/Projects/IProjectAdminAppService.cs

@ -22,9 +22,5 @@ namespace Volo.Docs.Admin.Projects
Task ReindexAllAsync();
Task<List<ProjectWithoutDetailsDto>> GetListWithoutDetailsAsync();
Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input);
Task DeletePdfFileAsync(DeletePdfFileInput input);
}
}

1
modules/docs/src/Volo.Docs.Admin.Application/Volo.Docs.Admin.Application.csproj

@ -17,6 +17,7 @@
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.AutoMapper\Volo.Abp.AutoMapper.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Caching\Volo.Abp.Caching.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.Ddd.Application\Volo.Abp.Ddd.Application.csproj" />
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.BackgroundJobs.Abstractions\Volo.Abp.BackgroundJobs.Abstractions.csproj" />
</ItemGroup>
</Project>

41
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/BackgroundJobs/DocumentPdfGenerateJob.cs

@ -0,0 +1,41 @@
using System;
using System.Threading.Tasks;
using Microsoft.Extensions.Logging;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Uow;
using Volo.Docs.Projects;
using Volo.Docs.Projects.Pdf;
namespace Volo.Docs.Admin.BackgroundJobs;
public class DocumentPdfGenerateJob : AsyncBackgroundJob<DocumentPdfGenerateJobArgs>, ITransientDependency
{
protected IProjectPdfGenerator ProjectPdfGenerator { get; }
protected IProjectRepository ProjectRepository { get; }
protected IUnitOfWorkManager UnitOfWorkManager { get; }
public DocumentPdfGenerateJob(IProjectPdfGenerator projectPdfGenerator, IProjectRepository projectRepository, IUnitOfWorkManager unitOfWorkManager)
{
ProjectPdfGenerator = projectPdfGenerator;
ProjectRepository = projectRepository;
UnitOfWorkManager = unitOfWorkManager;
}
public async override Task ExecuteAsync(DocumentPdfGenerateJobArgs args)
{
try
{
Logger.LogInformation("Generating PDF for project {ProjectId}, version {Version}, language {LanguageCode}", args.ProjectId, args.Version, args.LanguageCode);
using var uow = UnitOfWorkManager.Begin(requiresNew: true);
var project = await ProjectRepository.GetAsync(args.ProjectId, includeDetails: true);
await ProjectPdfGenerator.GenerateAsync(project, args.Version, args.LanguageCode);
await uow.CompleteAsync();
}
catch (Exception e)
{
Logger.LogError(e, "Error while generating PDF for project {ProjectId}, version {Version}, language {LanguageCode}", args.ProjectId, args.Version, args.LanguageCode);
}
}
}

13
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/BackgroundJobs/DocumentPdfGenerateJobArgs.cs

@ -0,0 +1,13 @@
using System;
using Volo.Abp.BackgroundJobs;
namespace Volo.Docs.Admin.BackgroundJobs;
public class DocumentPdfGenerateJobArgs
{
public Guid ProjectId { get; set; }
public string Version { get; set; }
public string LanguageCode { get; set; }
}

4
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/DocsAdminApplicationModule.cs

@ -4,6 +4,7 @@ using Volo.Abp.AutoMapper;
using Volo.Abp.Caching;
using Volo.Abp.Modularity;
using Volo.Docs.Common;
using Volo.Abp.BackgroundJobs;
namespace Volo.Docs.Admin
{
@ -13,7 +14,8 @@ namespace Volo.Docs.Admin
typeof(DocsCommonApplicationModule),
typeof(AbpCachingModule),
typeof(AbpAutoMapperModule),
typeof(AbpDddApplicationModule)
typeof(AbpDddApplicationModule),
typeof(AbpBackgroundJobsAbstractionsModule)
)]
public class DocsAdminApplicationModule : AbpModule
{

64
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Documents/DocumentPdfAdminAppService.cs

@ -0,0 +1,64 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options;
using Volo.Abp.Application.Dtos;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.DistributedLocking;
using Volo.Docs.Admin.BackgroundJobs;
using Volo.Docs.Admin.Projects;
using Volo.Docs.Common.Documents;
using Volo.Docs.Projects;
using Volo.Docs.Projects.Pdf;
namespace Volo.Docs.Admin.Documents;
[Authorize(DocsAdminPermissions.Projects.ManagePdfFiles)]
public class DocumentPdfAdminAppService : DocumentPdfAppService, IDocumentPdfAdminAppService
{
protected IBackgroundJobManager BackgroundJobManager { get; }
protected IAbpDistributedLock DistributedLock { get; }
public DocumentPdfAdminAppService(
IProjectPdfGenerator projectPdfGenerator,
IProjectRepository projectRepository,
IProjectPdfFileStore projectPdfFileStore,
IOptions<DocsProjectPdfGeneratorOptions> options,
IBackgroundJobManager backgroundJobManager,
IAbpDistributedLock distributedLock) :
base(projectPdfGenerator, projectRepository, projectPdfFileStore, options)
{
BackgroundJobManager = backgroundJobManager;
DistributedLock = distributedLock;
}
public virtual async Task GeneratePdfAsync(DocumentPdfGeneratorInput input)
{
var project = await ProjectRepository.GetAsync(input.ProjectId, includeDetails: true);
await BackgroundJobManager.EnqueueAsync(new DocumentPdfGenerateJobArgs
{
Version = project.GetFullVersion(input.Version),
LanguageCode = input.LanguageCode,
ProjectId = input.ProjectId,
});
}
public virtual async Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input)
{
var project = await ProjectRepository.GetAsync(input.ProjectId, includeDetails: true);
var pdfFiles = project.PdfFiles.Skip(input.SkipCount).Take(input.MaxResultCount).ToList();
return new PagedResultDto<ProjectPdfFileDto>(
project.PdfFiles.Count,
ObjectMapper.Map<List<ProjectPdfFile>, List<ProjectPdfFileDto>>(pdfFiles)
);
}
public virtual async Task DeletePdfFileAsync(DeletePdfFileInput input)
{
var project = await ProjectRepository.GetAsync(input.ProjectId, includeDetails: true);
await ProjectPdfFileStore.DeleteAsync(project, input.Version, input.LanguageCode);
}
}

20
modules/docs/src/Volo.Docs.Admin.Application/Volo/Docs/Admin/Projects/ProjectAdminAppService.cs

@ -181,25 +181,5 @@ namespace Volo.Docs.Admin.Projects
var projects = await _projectRepository.GetListWithoutDetailsAsync();
return ObjectMapper.Map<List<ProjectWithoutDetails>, List<ProjectWithoutDetailsDto>>(projects);
}
[Authorize(DocsAdminPermissions.Projects.ManagePdfFiles)]
public virtual async Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input)
{
var project = await _projectRepository.GetAsync(input.ProjectId, includeDetails: true);
var pdfFiles = project.PdfFiles.Skip(input.SkipCount).Take(input.MaxResultCount).ToList();
return new PagedResultDto<ProjectPdfFileDto>(
project.PdfFiles.Count,
ObjectMapper.Map<List<ProjectPdfFile>, List<ProjectPdfFileDto>>(pdfFiles)
);
}
[Authorize(DocsAdminPermissions.Projects.ManagePdfFiles)]
public virtual async Task DeletePdfFileAsync(DeletePdfFileInput input)
{
var project = await _projectRepository.GetAsync(input.ProjectId, includeDetails: true);
await _projectPdfFileStore.DeleteAsync(project, input.Version, input.LanguageCode);
}
}
}

61
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/DocumentPdfAdminClientProxy.Generated.cs

@ -0,0 +1,61 @@
// This file is automatically generated by ABP framework to use MVC Controllers from CSharp
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Content;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Http.Client;
using Volo.Abp.Http.Client.ClientProxying;
using Volo.Abp.Http.Modeling;
using Volo.Docs.Admin.Projects;
using Volo.Docs.Common.Documents;
// ReSharper disable once CheckNamespace
namespace Volo.Docs.Admin;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IDocumentPdfAppService), typeof(DocumentPdfAdminClientProxy))]
public partial class DocumentPdfAdminClientProxy : ClientProxyBase<IDocumentPdfAppService>, IDocumentPdfAppService
{
public virtual async Task GeneratePdfAsync(DocumentPdfGeneratorInput input)
{
await RequestAsync(nameof(GeneratePdfAsync), new ClientProxyRequestTypeValue
{
{ typeof(DocumentPdfGeneratorInput), input }
});
}
public virtual async Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input)
{
return await RequestAsync<PagedResultDto<ProjectPdfFileDto>>(nameof(GetPdfFilesAsync), new ClientProxyRequestTypeValue
{
{ typeof(GetPdfFilesInput), input }
});
}
public virtual async Task DeletePdfFileAsync(DeletePdfFileInput input)
{
await RequestAsync(nameof(DeletePdfFileAsync), new ClientProxyRequestTypeValue
{
{ typeof(DeletePdfFileInput), input }
});
}
public virtual async Task<IRemoteStreamContent> DownloadPdfAsync(DocumentPdfGeneratorInput input)
{
return await RequestAsync<IRemoteStreamContent>(nameof(DownloadPdfAsync), new ClientProxyRequestTypeValue
{
{ typeof(DocumentPdfGeneratorInput), input }
});
}
public virtual async Task<bool> ExistsAsync(DocumentPdfGeneratorInput input)
{
return await RequestAsync<bool>(nameof(ExistsAsync), new ClientProxyRequestTypeValue
{
{ typeof(DocumentPdfGeneratorInput), input }
});
}
}

7
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/DocumentPdfAdminClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of DocumentPdfAdminClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.Docs.Admin;
public partial class DocumentPdfAdminClientProxy
{
}

16
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/ProjectsAdminClientProxy.Generated.cs

@ -68,22 +68,6 @@ public partial class ProjectsAdminClientProxy : ClientProxyBase<IProjectAdminApp
return await RequestAsync<List<ProjectWithoutDetailsDto>>(nameof(GetListWithoutDetailsAsync));
}
public virtual async Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input)
{
return await RequestAsync<PagedResultDto<ProjectPdfFileDto>>(nameof(GetPdfFilesAsync), new ClientProxyRequestTypeValue
{
{ typeof(GetPdfFilesInput), input }
});
}
public virtual async Task DeletePdfFileAsync(DeletePdfFileInput input)
{
await RequestAsync(nameof(DeletePdfFileAsync), new ClientProxyRequestTypeValue
{
{ typeof(DeletePdfFileInput), input }
});
}
public virtual async Task ReindexAsync(ReindexInput input)
{
await RequestAsync(nameof(ReindexAsync), new ClientProxyRequestTypeValue

460
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/Volo/Docs/Admin/docs-admin-generate-proxy.json

@ -4,6 +4,466 @@
"rootPath": "docs-admin",
"remoteServiceName": "AbpDocsAdmin",
"controllers": {
"Volo.Docs.Admin.DocumentPdfAdminController": {
"controllerName": "DocumentPdfAdmin",
"controllerGroupName": "DocumentsPdfAdmin",
"isRemoteService": true,
"isIntegrationService": false,
"apiVersion": null,
"type": "Volo.Docs.Admin.DocumentPdfAdminController",
"interfaces": [
{
"type": "Volo.Docs.Admin.Documents.IDocumentPdfAdminAppService",
"name": "IDocumentPdfAdminAppService",
"methods": [
{
"name": "GeneratePdfAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput, Volo.Docs.Common.Application.Contracts",
"type": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"typeSimple": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "System.Void",
"typeSimple": "System.Void"
}
},
{
"name": "GetPdfFilesAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Admin.Projects.GetPdfFilesInput, Volo.Docs.Admin.Application.Contracts",
"type": "Volo.Docs.Admin.Projects.GetPdfFilesInput",
"typeSimple": "Volo.Docs.Admin.Projects.GetPdfFilesInput",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "Volo.Abp.Application.Dtos.PagedResultDto<Volo.Docs.Admin.Projects.ProjectPdfFileDto>",
"typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto<Volo.Docs.Admin.Projects.ProjectPdfFileDto>"
}
},
{
"name": "DeletePdfFileAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Admin.Projects.DeletePdfFileInput, Volo.Docs.Admin.Application.Contracts",
"type": "Volo.Docs.Admin.Projects.DeletePdfFileInput",
"typeSimple": "Volo.Docs.Admin.Projects.DeletePdfFileInput",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "System.Void",
"typeSimple": "System.Void"
}
},
{
"name": "DownloadPdfAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput, Volo.Docs.Common.Application.Contracts",
"type": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"typeSimple": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "Volo.Abp.Content.IRemoteStreamContent",
"typeSimple": "Volo.Abp.Content.IRemoteStreamContent"
}
},
{
"name": "ExistsAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput, Volo.Docs.Common.Application.Contracts",
"type": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"typeSimple": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "System.Boolean",
"typeSimple": "boolean"
}
}
]
},
{
"type": "Volo.Docs.Common.Documents.IDocumentPdfAppService",
"name": "IDocumentPdfAppService",
"methods": [
{
"name": "DownloadPdfAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput, Volo.Docs.Common.Application.Contracts",
"type": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"typeSimple": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "Volo.Abp.Content.IRemoteStreamContent",
"typeSimple": "Volo.Abp.Content.IRemoteStreamContent"
}
},
{
"name": "ExistsAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput, Volo.Docs.Common.Application.Contracts",
"type": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"typeSimple": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "System.Boolean",
"typeSimple": "boolean"
}
}
]
}
],
"actions": {
"GeneratePdfAsyncByInput": {
"uniqueName": "GeneratePdfAsyncByInput",
"name": "GeneratePdfAsync",
"httpMethod": "GET",
"url": "api/docs/admin/documents/pdf/generate",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput, Volo.Docs.Common.Application.Contracts",
"type": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"typeSimple": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "input",
"name": "ProjectId",
"jsonName": null,
"type": "System.Guid",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "Version",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "LanguageCode",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
"type": "System.Void",
"typeSimple": "System.Void"
},
"allowAnonymous": null,
"implementFrom": "Volo.Docs.Admin.Documents.IDocumentPdfAdminAppService"
},
"GetPdfFilesAsyncByInput": {
"uniqueName": "GetPdfFilesAsyncByInput",
"name": "GetPdfFilesAsync",
"httpMethod": "GET",
"url": "api/docs/admin/documents/pdf/files",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Admin.Projects.GetPdfFilesInput, Volo.Docs.Admin.Application.Contracts",
"type": "Volo.Docs.Admin.Projects.GetPdfFilesInput",
"typeSimple": "Volo.Docs.Admin.Projects.GetPdfFilesInput",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "input",
"name": "ProjectId",
"jsonName": null,
"type": "System.Guid",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "Sorting",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "SkipCount",
"jsonName": null,
"type": "System.Int32",
"typeSimple": "number",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "MaxResultCount",
"jsonName": null,
"type": "System.Int32",
"typeSimple": "number",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
"type": "Volo.Abp.Application.Dtos.PagedResultDto<Volo.Docs.Admin.Projects.ProjectPdfFileDto>",
"typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto<Volo.Docs.Admin.Projects.ProjectPdfFileDto>"
},
"allowAnonymous": null,
"implementFrom": "Volo.Docs.Admin.Documents.IDocumentPdfAdminAppService"
},
"DeletePdfFileAsyncByInput": {
"uniqueName": "DeletePdfFileAsyncByInput",
"name": "DeletePdfFileAsync",
"httpMethod": "DELETE",
"url": "api/docs/admin/documents/pdf/delete-file",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Admin.Projects.DeletePdfFileInput, Volo.Docs.Admin.Application.Contracts",
"type": "Volo.Docs.Admin.Projects.DeletePdfFileInput",
"typeSimple": "Volo.Docs.Admin.Projects.DeletePdfFileInput",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "input",
"name": "ProjectId",
"jsonName": null,
"type": "System.Guid",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "Version",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "LanguageCode",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
"type": "System.Void",
"typeSimple": "System.Void"
},
"allowAnonymous": null,
"implementFrom": "Volo.Docs.Admin.Documents.IDocumentPdfAdminAppService"
},
"DownloadPdfAsyncByInput": {
"uniqueName": "DownloadPdfAsyncByInput",
"name": "DownloadPdfAsync",
"httpMethod": "GET",
"url": "api/docs/admin/documents/pdf/download",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput, Volo.Docs.Common.Application.Contracts",
"type": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"typeSimple": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "input",
"name": "ProjectId",
"jsonName": null,
"type": "System.Guid",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "Version",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "LanguageCode",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
"type": "Volo.Abp.Content.IRemoteStreamContent",
"typeSimple": "Volo.Abp.Content.IRemoteStreamContent"
},
"allowAnonymous": null,
"implementFrom": "Volo.Docs.Common.Documents.IDocumentPdfAppService"
},
"ExistsAsyncByInput": {
"uniqueName": "ExistsAsyncByInput",
"name": "ExistsAsync",
"httpMethod": "GET",
"url": "api/docs/admin/documents/pdf/exists",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput, Volo.Docs.Common.Application.Contracts",
"type": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"typeSimple": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "input",
"name": "ProjectId",
"jsonName": null,
"type": "System.Guid",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "Version",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "LanguageCode",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
"type": "System.Boolean",
"typeSimple": "boolean"
},
"allowAnonymous": null,
"implementFrom": "Volo.Docs.Common.Documents.IDocumentPdfAppService"
}
}
},
"Volo.Docs.Admin.DocumentsAdminController": {
"controllerName": "DocumentsAdmin",
"controllerGroupName": "DocumentsAdmin",

1199
modules/docs/src/Volo.Docs.Admin.HttpApi.Client/ClientProxies/docs-admin-generate-proxy.json

File diff suppressed because it is too large

60
modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/DocumentPdfAdminController.cs

@ -0,0 +1,60 @@
using System.Threading.Tasks;
using Asp.Versioning;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.AspNetCore.Mvc;
using Volo.Abp.Content;
using Volo.Docs.Admin.Documents;
using Volo.Docs.Admin.Projects;
using Volo.Docs.Common.Documents;
namespace Volo.Docs.Admin;
[RemoteService(Name = DocsAdminRemoteServiceConsts.RemoteServiceName)]
[Area(DocsAdminRemoteServiceConsts.ModuleName)]
[ControllerName("DocumentsPdfAdmin")]
[Route("api/docs/admin/documents/pdf")]
public class DocumentPdfAdminController : AbpControllerBase, IDocumentPdfAdminAppService
{
private readonly IDocumentPdfAdminAppService _documentPdfAdminAppService;
public DocumentPdfAdminController(IDocumentPdfAdminAppService documentPdfAdminAppService)
{
_documentPdfAdminAppService = documentPdfAdminAppService;
}
[HttpGet]
[Route("generate")]
public Task GeneratePdfAsync(DocumentPdfGeneratorInput input)
{
return _documentPdfAdminAppService.GeneratePdfAsync(input);
}
[HttpGet]
[Route("files")]
public Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input)
{
return _documentPdfAdminAppService.GetPdfFilesAsync(input);
}
[HttpDelete]
[Route("delete-file")]
public Task DeletePdfFileAsync(DeletePdfFileInput input)
{
return _documentPdfAdminAppService.DeletePdfFileAsync(input);
}
[HttpGet]
[Route("download")]
public Task<IRemoteStreamContent> DownloadPdfAsync(DocumentPdfGeneratorInput input)
{
return _documentPdfAdminAppService.DownloadPdfAsync(input);
}
[HttpGet]
[Route("exists")]
public Task<bool> ExistsAsync(DocumentPdfGeneratorInput input)
{
return _documentPdfAdminAppService.ExistsAsync(input);
}
}

14
modules/docs/src/Volo.Docs.Admin.HttpApi/Volo/Docs/Admin/ProjectsAdminController.cs

@ -70,20 +70,6 @@ namespace Volo.Docs.Admin
return _projectAppService.GetListWithoutDetailsAsync();
}
[HttpGet]
[Route("PdfFiles")]
public Task<PagedResultDto<ProjectPdfFileDto>> GetPdfFilesAsync(GetPdfFilesInput input)
{
return _projectAppService.GetPdfFilesAsync(input);
}
[HttpDelete]
[Route("DeletePdfFile")]
public Task DeletePdfFileAsync(DeletePdfFileInput input)
{
return _projectAppService.DeletePdfFileAsync(input);
}
[HttpPost]
[Route("Reindex")]
public Task ReindexAsync(ReindexInput input)

68
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/GeneratePdf.cshtml

@ -8,40 +8,34 @@
@{
Layout = null;
}
<abp-modal>
<abp-modal-header title="@(L["GeneratePdf"].Value + " - " + Model.ViewModel.ShortName)"></abp-modal-header>
<abp-modal-body>
<input id="ProjectId" name="ProjectId" value="@Model.ViewModel.ProjectId" hidden/>
<input id="ShortName" name="ShortName" value="@Model.ViewModel.ShortName" hidden/>
<div class="mb-3">
<label class="form-label" for="Version">@L["Version"]</label>
<select name="Version" id="Version" class="form-select mt-2">
@foreach (var version in Model.ViewModel.Versions)
{
<option value="@version.Value">@version.Value</option>
}
</select>
</div>
<div class="mb-3">
<label class="form-label" for="Language">@L["Language"]</label>
<select name="Language" id="Language" class="form-select mt-2">
@foreach (var language in Model.ViewModel.Languages)
{
<option value="@language.Value">@language.Value</option>
}
</select>
</div>
<div class="form-check mb-3">
<label class="form-check-label" for="ForceToGenerate">
<input id="ForceToGenerate" type="checkbox" class="form-check-input" />
@L["ForceToGenerateNewPdf"]
</label>
</div>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.None)">
<button type="button" class="btn btn-sm btn-link" data-bs-dismiss="modal">@L["Close"]</button>
<button type="button" class="btn btn-sm btn-outline-primary" id="GenerateBtn" data-busy-text="@L["Generating"].Value"><span>@L["GeneratePdf"]</span></button>
<button type="button" class="btn btn-sm btn-primary" id="GenerateAndDownloadPdfBtn">@L["GenerateAndDownloadPdf"]</button>
</abp-modal-footer>
</abp-modal>
<form method="post" asp-page="/Docs/Admin/Projects/GeneratePdf">
<abp-modal>
<abp-modal-header title="@(L["GeneratePdf"].Value + " - " + Model.ViewModel.ShortName)"></abp-modal-header>
<abp-modal-body>
<input id="ProjectId" asp-for="ProjectId" hidden/>
<input id="ShortName" name="ShortName" value="@Model.ViewModel.ShortName" hidden/>
<div class="mb-3">
<label class="form-label" asp-for="Version">@L["Version"]</label>
<select asp-for="Version" class="form-select mt-2">
@foreach (var version in Model.ViewModel.Versions)
{
<option value="@version.Value">@version.Value</option>
}
</select>
</div>
<div class="mb-3">
<label class="form-label" asp-for="Language">@L["Language"]</label>
<select asp-for="Language" class="form-select mt-2">
@foreach (var language in Model.ViewModel.Languages)
{
<option value="@language.Value">@language.Value</option>
}
</select>
</div>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.None)">
<button type="button" class="btn btn-sm btn-link" data-bs-dismiss="modal">@L["Close"]</button>
<button type="submit" class="btn btn-sm btn-primary" id="GenerateBtn" data-busy-text="@L["Generating"].Value"><span>@L["GeneratePdf"]</span></button>
</abp-modal-footer>
</abp-modal>
</form>

33
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/GeneratePdf.cshtml.cs

@ -4,6 +4,7 @@ using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
using Volo.Docs.Admin.Documents;
using Volo.Docs.Admin.Projects;
using Volo.Docs.Common.Documents;
using Volo.Docs.Common.Projects;
@ -15,20 +16,32 @@ public class GeneratePdfModal : DocsAdminPageModel
{
protected IProjectAppService ProjectAppService { get; }
protected IProjectAdminAppService ProjectAdminAppService { get; }
protected IDocumentPdfAdminAppService DocumentPdfAdminAppService { get; }
public GeneratePdfViewModel ViewModel { get; set; }
[BindProperty(SupportsGet = true)]
public Guid ProjectId { get; set; }
[BindProperty(SupportsGet = true)]
public string Version { get; set; }
[BindProperty(SupportsGet = true)]
public string Language { get; set; }
public GeneratePdfModal(
IProjectAppService projectAppService,
IProjectAdminAppService projectAdminAppService)
IProjectAdminAppService projectAdminAppService,
IDocumentPdfAdminAppService documentPdfAdminAppService)
{
ProjectAppService = projectAppService;
ProjectAdminAppService = projectAdminAppService;
DocumentPdfAdminAppService = documentPdfAdminAppService;
}
public virtual async Task<IActionResult> OnGetAsync(Guid id)
public virtual async Task<IActionResult> OnGetAsync()
{
var project = await ProjectAdminAppService.GetAsync(id);
var project = await ProjectAdminAppService.GetAsync(ProjectId);
var versions = await ProjectAppService.GetVersionsAsync(project.ShortName);
if(versions.Items.Count == 0)
{
@ -40,7 +53,6 @@ public class GeneratePdfModal : DocsAdminPageModel
var languages = await ProjectAppService.GetLanguageListAsync(project.ShortName, versions.Items.FirstOrDefault()?.Name);
ViewModel = new GeneratePdfViewModel
{
ProjectId = id,
ShortName = project.ShortName,
Versions = versions.Items.Select(x => new SelectListItem(x.DisplayName, x.Name)).ToList(),
Languages = languages.Languages.Select(x => new SelectListItem(x.DisplayName, x.Code)).ToList()
@ -49,9 +61,20 @@ public class GeneratePdfModal : DocsAdminPageModel
return Page();
}
public virtual async Task<IActionResult> OnPostAsync()
{
await DocumentPdfAdminAppService.GeneratePdfAsync(new DocumentPdfGeneratorInput
{
ProjectId = ProjectId,
Version = Version,
LanguageCode = Language
});
return NoContent();
}
public class GeneratePdfViewModel
{
public Guid ProjectId { get; set; }
public string ShortName { get; set; }
public List<SelectListItem> Versions { get; set; }
public List<SelectListItem> Languages { get; set; }

2
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/ManagePdfFiles.cshtml

@ -36,6 +36,6 @@
</abp-card-body>
</abp-card>
</abp-modal-body>
<abp-modal-footer buttons="@(AbpModalButtons.Close|AbpModalButtons.Save)">
<abp-modal-footer buttons="@(AbpModalButtons.Close)">
</abp-modal-footer>
</abp-modal>

54
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/generatePdf.js

@ -4,8 +4,6 @@ $(function () {
var l = abp.localization.getResource('Docs');
var projectAppService = volo.docs.projects.docsProject;
var pdfGeneratorAppService = volo.docs.documents.docsDocumentPdfGenerator;
var projectAdminAppService = volo.docs.admin.projectsAdmin;
var initModal = function (publicApi, args) {
@ -22,58 +20,6 @@ $(function () {
});
})
$("#GenerateBtn").click(function () {
var $btn = $(this);
$btn.buttonBusy(true);
$("#GenerateAndDownloadPdfBtn").buttonBusy(true);
var input = {
projectId: $("#ProjectId").val(),
version: $("#Version").val(),
languageCode: $("#Language").val(),
}
function generatePdf(input) {
pdfGeneratorAppService.generatePdf(input, {
abpHandleError : false,
error: function (jqXHR) {
if (jqXHR.status === 200) {
abp.message.success(l('PdfFileGeneratedSuccessfully'));
$btn.buttonBusy(false);
$("#GenerateAndDownloadPdfBtn").buttonBusy(false);
} else {
abp.ajax.handleErrorStatusCode(jqXHR.status);
}
}
});
}
if(shouldForceToGenerate(input)){
projectAdminAppService.deletePdfFile(input).done(() =>{
generatePdf(input);
});
}else{
generatePdf(input);
}
})
$("#GenerateAndDownloadPdfBtn").click(function () {
var input = {
projectId: $("#ProjectId").val(),
version: $("#Version").val(),
languageCode: $("#Language").val(),
}
if(shouldForceToGenerate(input)){
projectAdminAppService.deletePdfFile(input).done(() =>{
window.open(abp.appPath + 'api/docs/documents/pdf' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'version', value: input.version }, { name: 'languageCode', value: input.languageCode }]), '_blank');
});
}else{
window.open(abp.appPath + 'api/docs/documents/pdf' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'version', value: input.version }, { name: 'languageCode', value: input.languageCode }]), '_blank');
}
})
function shouldForceToGenerate(input) {
return $("#ForceToGenerate").is(":checked");
}
return {
initModal: initModal,
};

23
modules/docs/src/Volo.Docs.Admin.Web/Pages/Docs/Admin/Projects/managePdfFiles.js

@ -3,7 +3,7 @@ $(function () {
abp.modals.projectManagePdfFiles = function () {
var l = abp.localization.getResource('Docs');
var projectAdminAppService = volo.docs.admin.projectsAdmin;
var documentPdfAdminAppService = volo.docs.admin.documentPdfAdmin;
var _generatePdfModal = new abp.ModalManager({
viewUrl: abp.appPath + 'Docs/Admin/Projects/GeneratePdf',
@ -22,7 +22,7 @@ $(function () {
scrollCollapse: true,
order: [[2, 'desc']],
ajax: abp.libs.datatables.createAjax(
volo.docs.admin.projectsAdmin.getPdfFiles,
documentPdfAdminAppService.getPdfFiles,
{
projectId : args.projectId
}
@ -37,16 +37,23 @@ $(function () {
return l('PdfFileDeletionWarningMessage', data.record.fileName);
},
action: function (data) {
projectAdminAppService.deletePdfFile({
documentPdfAdminAppService.deletePdfFile({
projectId: data.record.projectId,
version: data.record.version,
languageCode: data.record.languageCode
}).then(() => {
_dataTable.ajax.reloadEx();
abp.notify.success(l('PdfGeneratedSuccessfully'));
abp.notify.success(l('PdfDeletedSuccessfully'));
})
},
}
},
{
text: l('Download'),
action: function (data) {
var url = abp.appPath + 'api/docs/admin/documents/pdf/download?projectId=' + data.record.projectId + '&version=' + data.record.version + '&languageCode=' + data.record.languageCode;
window.open(url, '_blank');
},
},
],
},
},
@ -78,13 +85,17 @@ $(function () {
$('#GeneratePdfBtn').click(function () {
_generatePdfModal.open({
Id: args.projectId,
ProjectId: args.projectId,
});
});
_generatePdfModal.onClose(function () {
_dataTable.ajax.reloadEx();
});
_generatePdfModal.onResult(function (){
abp.message.info(l('PdfGenerationStartedInfoMessage'));
});
};
return {

2
modules/docs/src/Volo.Docs.Admin.Web/Volo.Docs.Admin.Web.abppkg

@ -6,7 +6,7 @@
"applicationName": "VoloDocs.Web",
"module": "docs-admin",
"url": "https://localhost:5001",
"output": "wwwroot/client-proxies",
"output": "wwwroot/client-proxies/",
"serviceType": "application"
}
}

60
modules/docs/src/Volo.Docs.Admin.Web/wwwroot/client-proxies/docs-admin-proxy.js

@ -5,6 +5,51 @@
(function(){
// controller volo.docs.admin.documentPdfAdmin
(function(){
abp.utils.createNamespace(window, 'volo.docs.admin.documentPdfAdmin');
volo.docs.admin.documentPdfAdmin.generatePdf = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/documents/pdf/generate' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'version', value: input.version }, { name: 'languageCode', value: input.languageCode }]) + '',
type: 'GET',
dataType: null
}, ajaxParams));
};
volo.docs.admin.documentPdfAdmin.getPdfFiles = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/documents/pdf/files' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '',
type: 'GET'
}, ajaxParams));
};
volo.docs.admin.documentPdfAdmin.deletePdfFile = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/documents/pdf/delete-file' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'version', value: input.version }, { name: 'languageCode', value: input.languageCode }]) + '',
type: 'DELETE',
dataType: null
}, ajaxParams));
};
volo.docs.admin.documentPdfAdmin.downloadPdf = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/documents/pdf/download' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'version', value: input.version }, { name: 'languageCode', value: input.languageCode }]) + '',
type: 'GET'
}, ajaxParams));
};
volo.docs.admin.documentPdfAdmin.exists = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/documents/pdf/exists' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'version', value: input.version }, { name: 'languageCode', value: input.languageCode }]) + '',
type: 'GET'
}, ajaxParams));
};
})();
// controller volo.docs.admin.documentsAdmin
(function(){
@ -136,21 +181,6 @@
}, ajaxParams));
};
volo.docs.admin.projectsAdmin.getPdfFiles = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/projects/PdfFiles' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'sorting', value: input.sorting }, { name: 'skipCount', value: input.skipCount }, { name: 'maxResultCount', value: input.maxResultCount }]) + '',
type: 'GET'
}, ajaxParams));
};
volo.docs.admin.projectsAdmin.deletePdfFile = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/projects/DeletePdfFile' + abp.utils.buildQueryString([{ name: 'projectId', value: input.projectId }, { name: 'version', value: input.version }, { name: 'languageCode', value: input.languageCode }]) + '',
type: 'DELETE',
dataType: null
}, ajaxParams));
};
volo.docs.admin.projectsAdmin.reindex = function(input, ajaxParams) {
return abp.ajax($.extend(true, {
url: abp.appPath + 'api/docs/admin/projects/Reindex',

3
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo.Docs.Common.Application.Contracts.abppkg

@ -0,0 +1,3 @@
{
"role": "Volo.Docs.Application.Contracts"
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonPermissionDefinitionProvider.cs

@ -10,7 +10,7 @@ namespace Volo.Docs.Common
{
var group = context.AddGroup(DocsCommonPermissions.GroupName, L("Permission:DocumentManagement.Common"));
group.AddPermission(DocsCommonPermissions.Projects.PdfGeneration, L("Permission:PdfGeneration"));
group.AddPermission(DocsCommonPermissions.Projects.PdfDownload, L("Permission:PdfDownload"));
}
private static LocalizableString L(string name)

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/DocsCommonPermissions.cs

@ -8,7 +8,7 @@ namespace Volo.Docs.Common
public static class Projects
{
public const string PdfGeneration = GroupName + ".PdfGeneration";
public const string PdfDownload = GroupName + ".PdfDownload";
}
public static string[] GetAll()

12
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Documents/IDocumentPdfAppService.cs

@ -0,0 +1,12 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Content;
namespace Volo.Docs.Common.Documents;
public interface IDocumentPdfAppService : IApplicationService
{
Task<IRemoteStreamContent> DownloadPdfAsync(DocumentPdfGeneratorInput input);
Task<bool> ExistsAsync(DocumentPdfGeneratorInput input);
}

10
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Documents/IDocumentPdfGeneratorAppService.cs

@ -1,10 +0,0 @@
using System.Threading.Tasks;
using Volo.Abp.Application.Services;
using Volo.Abp.Content;
namespace Volo.Docs.Common.Documents;
public interface IDocumentPdfGeneratorAppService : IApplicationService
{
Task<IRemoteStreamContent> GeneratePdfAsync(DocumentPdfGeneratorInput input);
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/ar.json

@ -2,6 +2,6 @@
"culture": "ar",
"texts": {
"Permission:DocumentManagement.Common": "إدارة المستندات العامة",
"Permission:PdfGeneration": "إنشاء ملفات PDF"
"Permission:PdfDownload": "تحميل ملفات PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/cs.json

@ -2,6 +2,6 @@
"culture": "cs",
"texts": {
"Permission:DocumentManagement.Common": "Správa dokumentů",
"Permission:PdfGeneration": "Generování PDF"
"Permission:PdfDownload": "Stahování PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/de-DE.json

@ -2,6 +2,6 @@
"culture": "de-DE",
"texts": {
"Permission:DocumentManagement.Common": "Dokumentenverwaltung",
"Permission:PdfGeneration": "PDF-Generierung"
"Permission:PdfDownload": "PDF-Herunterladen"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/de.json

@ -2,6 +2,6 @@
"culture": "de",
"texts": {
"Permission:DocumentManagement.Common": "Dokumentenverwaltung",
"Permission:PdfGeneration": "PDF-Generierung"
"Permission:PdfDownload": "PDF-Herunterladen"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/el.json

@ -2,6 +2,6 @@
"culture": "el",
"texts": {
"Permission:DocumentManagement.Common": "Διαχείριση Εγγράφων",
"Permission:PdfGeneration": "Δημιουργία PDF"
"Permission:PdfDownload": "Λήψη PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/en-GB.json

@ -2,6 +2,6 @@
"culture": "en-GB",
"texts": {
"Permission:DocumentManagement.Common": "Document Management Common",
"Permission:PdfGeneration": "PDF Generation"
"Permission:PdfDownload": "PDF Download"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/en.json

@ -2,6 +2,6 @@
"culture": "en",
"texts": {
"Permission:DocumentManagement.Common": "Document Management Common",
"Permission:PdfGeneration": "PDF Generation"
"Permission:PdfDownload": "PDF Download"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/es.json

@ -2,6 +2,6 @@
"culture": "es",
"texts": {
"Permission:DocumentManagement.Common": "Gestión de documentos comunes",
"Permission:PdfGeneration": "Generación de PDF"
"Permission:PdfDownload": "Descarga de PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/fi.json

@ -2,6 +2,6 @@
"culture": "fi",
"texts": {
"Permission:DocumentManagement.Common": "Tiedostonhallinta",
"Permission:PdfGeneration": "PDF-generointi"
"Permission:PdfDownload": "PDF-lataaminen"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/fr.json

@ -2,6 +2,6 @@
"culture": "fr",
"texts": {
"Permission:DocumentManagement.Common": "Gestion des documents communs",
"Permission:PdfGeneration": "Génération de PDF"
"Permission:PdfDownload": "Téléchargement de PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hi.json

@ -2,6 +2,6 @@
"culture": "hi",
"texts": {
"Permission:DocumentManagement.Common": "सामान्य दस्तावेज़ प्रबंधन",
"Permission:PdfGeneration": "PDF उत्पन्न करना"
"Permission:PdfDownload": "PDF डाउनलोड करना"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hr.json

@ -2,6 +2,6 @@
"culture": "hr",
"texts": {
"Permission:DocumentManagement.Common": "Upravljanje zajedničkih dokumenata",
"Permission:PdfGeneration": "Generiranje PDF-a"
"Permission:PdfDownload": "Preuzimanje PDF-a"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/hu.json

@ -2,6 +2,6 @@
"culture": "hu",
"texts": {
"Permission:DocumentManagement.Common": "Általános dokumentumkezelés",
"Permission:PdfGeneration": "PDF generálás"
"Permission:PdfDownload": "PDF letöltése"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/is.json

@ -2,6 +2,6 @@
"culture": "is",
"texts": {
"Permission:DocumentManagement.Common": "Almennir skjöl",
"Permission:PdfGeneration": "Breyta í PDF"
"Permission:PdfDownload": "Breyta í PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/it.json

@ -2,6 +2,6 @@
"culture": "it",
"texts": {
"Permission:DocumentManagement.Common": "Gestione documenti comuni",
"Permission:PdfGeneration": "Generazione PDF"
"Permission:PdfDownload": "Download PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/nl.json

@ -2,6 +2,6 @@
"culture": "nl",
"texts": {
"Permission:DocumentManagement.Common": "Algemene documentbeheer",
"Permission:PdfGeneration": "PDF-generatie"
"Permission:PdfDownload": "PDF downloaden"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/pl-PL.json

@ -2,6 +2,6 @@
"culture": "pl-PL",
"texts": {
"Permission:DocumentManagement.Common": "Zarządzanie dokumentami",
"Permission:PdfGeneration": "Generowanie PDF"
"Permission:PdfDownload": "Pobieranie PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/pt-BR.json

@ -2,6 +2,6 @@
"culture": "pt-BR",
"texts": {
"Permission:DocumentManagement.Common": "Gerenciamento de documentos comuns",
"Permission:PdfGeneration": "Geração de PDF"
"Permission:PdfDownload": "Download de PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/ro-RO.json

@ -2,6 +2,6 @@
"culture": "ro-RO",
"texts": {
"Permission:DocumentManagement.Common": "Gestionarea documentelor comune",
"Permission:PdfGeneration": "Generarea PDF"
"Permission:PdfDownload": "Descărcare PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/ru.json

@ -2,6 +2,6 @@
"culture": "ru",
"texts": {
"Permission:DocumentManagement.Common": "Общее управление документами",
"Permission:PdfGeneration": "Генерация PDF"
"Permission:PdfDownload": "Скачивание PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/sk.json

@ -2,6 +2,6 @@
"culture": "sk",
"texts": {
"Permission:DocumentManagement.Common": "Správa dokumentov",
"Permission:PdfGeneration": "Generovanie PDF"
"Permission:PdfDownload": "Generovanie PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/sl.json

@ -2,6 +2,6 @@
"culture": "sl",
"texts": {
"Permission:DocumentManagement.Common": "Skupna dokumentna upravljanja",
"Permission:PdfGeneration": "Generiranje PDF"
"Permission:PdfDownload": "Prenos PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/sv.json

@ -2,6 +2,6 @@
"culture": "sv",
"texts": {
"Permission:DocumentManagement.Common": "Dokumenthantering",
"Permission:PdfGeneration": "PDF-generering"
"Permission:PdfDownload": "PDF-generering"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/tr.json

@ -2,6 +2,6 @@
"culture": "tr",
"texts": {
"Permission:DocumentManagement.Common": "Genel Belge Yönetimi",
"Permission:PdfGeneration": "PDF Oluşturma"
"Permission:PdfDownload": "PDF İndirme"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/vi.json

@ -2,6 +2,6 @@
"culture": "vi",
"texts": {
"Permission:DocumentManagement.Common": "Quản lý tài liệu chung",
"Permission:PdfGeneration": "Tạo PDF"
"Permission:PdfDownload": "Tải xuống PDF"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/zh-Hans.json

@ -2,6 +2,6 @@
"culture": "zh-Hans",
"texts": {
"Permission:DocumentManagement.Common": "通用文档管理",
"Permission:PdfGeneration": "PDF生成"
"Permission:PdfDownload": "PDF下载"
}
}

2
modules/docs/src/Volo.Docs.Common.Application.Contracts/Volo/Docs/Common/Localization/Resources/Docs/ApplicationContracts/zh-Hant.json

@ -2,6 +2,6 @@
"culture": "zh-Hant",
"texts": {
"Permission:DocumentManagement.Common": "通用文件管理",
"Permission:PdfGeneration": "PDF生成"
"Permission:PdfDownload": "PDF下載"
}
}

3
modules/docs/src/Volo.Docs.Common.Application/Volo.Docs.Common.Application.abppkg

@ -0,0 +1,3 @@
{
"role": "Volo.Docs.Application"
}

55
modules/docs/src/Volo.Docs.Common.Application/Volo/Docs/Common/Documents/DocumentPdfAppService.cs

@ -0,0 +1,55 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Microsoft.Extensions.Options;
using Volo.Abp.Content;
using Volo.Abp.Http;
using Volo.Docs.Projects;
using Volo.Docs.Projects.Pdf;
namespace Volo.Docs.Common.Documents;
[Authorize(DocsCommonPermissions.Projects.PdfDownload)]
public class DocumentPdfAppService : DocsCommonAppServiceBase, IDocumentPdfAppService
{
protected IProjectPdfGenerator ProjectPdfGenerator { get; }
protected IProjectRepository ProjectRepository { get; }
protected IProjectPdfFileStore ProjectPdfFileStore { get; }
protected IOptions<DocsProjectPdfGeneratorOptions> Options { get; }
public DocumentPdfAppService(
IProjectPdfGenerator projectPdfGenerator,
IProjectRepository projectRepository,
IProjectPdfFileStore projectPdfFileStore,
IOptions<DocsProjectPdfGeneratorOptions> options)
{
ProjectPdfGenerator = projectPdfGenerator;
ProjectRepository = projectRepository;
ProjectPdfFileStore = projectPdfFileStore;
Options = options;
}
public virtual async Task<IRemoteStreamContent> DownloadPdfAsync(DocumentPdfGeneratorInput input)
{
var project = await ProjectRepository.GetAsync(input.ProjectId);
var version = project.GetFullVersion(input.Version);
var languageCode = input.LanguageCode;
var fileName = Options.Value.CalculatePdfFileName(project, version, languageCode);
var fileStream = await ProjectPdfFileStore.GetOrNullAsync(project, version, languageCode);
if (fileStream != null)
{
return new RemoteStreamContent(fileStream, fileName, MimeTypes.Application.Zip);
}
return null;
}
public virtual async Task<bool> ExistsAsync(DocumentPdfGeneratorInput input)
{
var project = await ProjectRepository.GetAsync(input.ProjectId);
var version = project.GetFullVersion(input.Version);
var languageCode = input.LanguageCode;
var fileName = Options.Value.CalculatePdfFileName(project, version, languageCode);
return project.FindPdfFile(fileName) != null;
}
}

52
modules/docs/src/Volo.Docs.Common.Application/Volo/Docs/Common/Documents/DocumentPdfGeneratorAppService.cs

@ -1,52 +0,0 @@
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Authorization;
using Volo.Abp.Application.Services;
using Volo.Abp.Content;
using Volo.Abp.Data;
using Volo.Docs.Projects;
using Volo.Docs.Projects.Pdf;
namespace Volo.Docs.Common.Documents;
[Authorize(DocsCommonPermissions.Projects.PdfGeneration)]
public class DocumentPdfGeneratorAppService : ApplicationService, IDocumentPdfGeneratorAppService
{
protected IProjectPdfGenerator ProjectPdfGenerator { get; }
protected IProjectRepository ProjectRepository { get; }
public DocumentPdfGeneratorAppService(
IProjectPdfGenerator projectPdfGenerator,
IProjectRepository projectRepository)
{
ProjectPdfGenerator = projectPdfGenerator;
ProjectRepository = projectRepository;
}
public virtual async Task<IRemoteStreamContent> GeneratePdfAsync(DocumentPdfGeneratorInput input)
{
var project = await ProjectRepository.GetAsync(input.ProjectId, includeDetails: true);
// https://github.com/abpframework/abp/blob/e96f601641ab8a4bb7d704d3b9df2c00517d96f6/modules/docs/src/Volo.Docs.Application/Volo/Docs/Documents/DocumentAppService.cs#L73
var inputVersionStringBuilder = new StringBuilder();
input.Version = inputVersionStringBuilder.Append(GetProjectVersionPrefixIfExist(project)).Append(input.Version).ToString();
return await ProjectPdfGenerator.GenerateAsync(project, input.Version, input.LanguageCode);
}
private string GetProjectVersionPrefixIfExist(Project project)
{
if (GetGithubVersionProviderSource(project) != GithubVersionProviderSource.Branches)
{
return string.Empty;
}
return project.GetProperty<string>("VersionBranchPrefix");
}
private GithubVersionProviderSource GetGithubVersionProviderSource(Project project)
{
return project.HasProperty("GithubVersionProviderSource")
? project.GetProperty<GithubVersionProviderSource>("GithubVersionProviderSource")
: GithubVersionProviderSource.Releases;
}
}

16
modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/Volo/Docs/Documents/DocsDocumentPdfGeneratorClientProxy.Generated.cs → modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/DocsDocumentPdfClientProxy.Generated.cs

@ -15,12 +15,20 @@ using Volo.Docs.Common.Documents;
namespace Volo.Docs.Documents;
[Dependency(ReplaceServices = true)]
[ExposeServices(typeof(IDocumentPdfGeneratorAppService), typeof(DocsDocumentPdfGeneratorClientProxy))]
public partial class DocsDocumentPdfGeneratorClientProxy : ClientProxyBase<IDocumentPdfGeneratorAppService>, IDocumentPdfGeneratorAppService
[ExposeServices(typeof(IDocumentPdfAppService), typeof(DocsDocumentPdfClientProxy))]
public partial class DocsDocumentPdfClientProxy : ClientProxyBase<IDocumentPdfAppService>, IDocumentPdfAppService
{
public virtual async Task<IRemoteStreamContent> GeneratePdfAsync(DocumentPdfGeneratorInput input)
public virtual async Task<IRemoteStreamContent> DownloadPdfAsync(DocumentPdfGeneratorInput input)
{
return await RequestAsync<IRemoteStreamContent>(nameof(GeneratePdfAsync), new ClientProxyRequestTypeValue
return await RequestAsync<IRemoteStreamContent>(nameof(DownloadPdfAsync), new ClientProxyRequestTypeValue
{
{ typeof(DocumentPdfGeneratorInput), input }
});
}
public virtual async Task<bool> ExistsAsync(DocumentPdfGeneratorInput input)
{
return await RequestAsync<bool>(nameof(ExistsAsync), new ClientProxyRequestTypeValue
{
{ typeof(DocumentPdfGeneratorInput), input }
});

7
modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/DocsDocumentPdfClientProxy.cs

@ -0,0 +1,7 @@
// This file is part of DocsDocumentPdfClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.Docs.Documents;
public partial class DocsDocumentPdfClientProxy
{
}

0
modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/Volo/Docs/Projects/DocsProjectClientProxy.Generated.cs → modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/DocsProjectClientProxy.Generated.cs

0
modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/Volo/Docs/Projects/DocsProjectClientProxy.cs → modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/DocsProjectClientProxy.cs

7
modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/Volo/Docs/Documents/DocsDocumentPdfGeneratorClientProxy.cs

@ -1,7 +0,0 @@
// This file is part of DocsDocumentPdfGeneratorClientProxy, you can customize it here
// ReSharper disable once CheckNamespace
namespace Volo.Docs.Documents;
public partial class DocsDocumentPdfGeneratorClientProxy
{
}

102
modules/docs/src/Volo.Docs.Common.HttpApi.Client/ClientProxies/docs-common-generate-proxy.json

@ -4,20 +4,20 @@
"rootPath": "docs-common",
"remoteServiceName": "AbpDocsCommon",
"controllers": {
"Volo.Docs.Documents.DocsDocumentPdfGeneratorController": {
"controllerName": "DocsDocumentPdfGenerator",
"controllerGroupName": "Document",
"Volo.Docs.Documents.DocsDocumentPdfController": {
"controllerName": "DocsDocumentPdf",
"controllerGroupName": "DocumentPdf",
"isRemoteService": true,
"isIntegrationService": false,
"apiVersion": null,
"type": "Volo.Docs.Documents.DocsDocumentPdfGeneratorController",
"type": "Volo.Docs.Documents.DocsDocumentPdfController",
"interfaces": [
{
"type": "Volo.Docs.Common.Documents.IDocumentPdfGeneratorAppService",
"name": "IDocumentPdfGeneratorAppService",
"type": "Volo.Docs.Common.Documents.IDocumentPdfAppService",
"name": "IDocumentPdfAppService",
"methods": [
{
"name": "GeneratePdfAsync",
"name": "DownloadPdfAsync",
"parametersOnMethod": [
{
"name": "input",
@ -32,16 +32,33 @@
"type": "Volo.Abp.Content.IRemoteStreamContent",
"typeSimple": "Volo.Abp.Content.IRemoteStreamContent"
}
},
{
"name": "ExistsAsync",
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput, Volo.Docs.Common.Application.Contracts",
"type": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"typeSimple": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"isOptional": false,
"defaultValue": null
}
],
"returnValue": {
"type": "System.Boolean",
"typeSimple": "boolean"
}
}
]
}
],
"actions": {
"GeneratePdfAsyncByInput": {
"uniqueName": "GeneratePdfAsyncByInput",
"name": "GeneratePdfAsync",
"DownloadPdfAsyncByInput": {
"uniqueName": "DownloadPdfAsyncByInput",
"name": "DownloadPdfAsync",
"httpMethod": "GET",
"url": "api/docs/documents/pdf",
"url": "api/docs/documents/pdf/download",
"supportedVersions": [],
"parametersOnMethod": [
{
@ -96,7 +113,68 @@
"typeSimple": "Volo.Abp.Content.IRemoteStreamContent"
},
"allowAnonymous": null,
"implementFrom": "Volo.Docs.Common.Documents.IDocumentPdfGeneratorAppService"
"implementFrom": "Volo.Docs.Common.Documents.IDocumentPdfAppService"
},
"ExistsAsyncByInput": {
"uniqueName": "ExistsAsyncByInput",
"name": "ExistsAsync",
"httpMethod": "GET",
"url": "api/docs/documents/pdf/exists",
"supportedVersions": [],
"parametersOnMethod": [
{
"name": "input",
"typeAsString": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput, Volo.Docs.Common.Application.Contracts",
"type": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"typeSimple": "Volo.Docs.Common.Documents.DocumentPdfGeneratorInput",
"isOptional": false,
"defaultValue": null
}
],
"parameters": [
{
"nameOnMethod": "input",
"name": "ProjectId",
"jsonName": null,
"type": "System.Guid",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "Version",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
},
{
"nameOnMethod": "input",
"name": "LanguageCode",
"jsonName": null,
"type": "System.String",
"typeSimple": "string",
"isOptional": false,
"defaultValue": null,
"constraintTypes": null,
"bindingSourceId": "ModelBinding",
"descriptorName": "input"
}
],
"returnValue": {
"type": "System.Boolean",
"typeSimple": "boolean"
},
"allowAnonymous": null,
"implementFrom": "Volo.Docs.Common.Documents.IDocumentPdfAppService"
}
}
},

15
modules/docs/src/Volo.Docs.Common.HttpApi.Client/Volo.Docs.Common.HttpApi.Client.abppkg

@ -0,0 +1,15 @@
{
"role": "Volo.Docs.HttpApi.Client",
"proxies": {
"csharp": {
"VoloDocs.Web-docs-common": {
"applicationName": "VoloDocs.Web",
"module": "docs-common",
"url": "https://localhost:5001",
"folder": "ClientProxies",
"serviceType": "all",
"withoutContracts": true
}
}
}
}

3
modules/docs/src/Volo.Docs.Common.HttpApi/Volo.Docs.Common.HttpApi.abppkg

@ -0,0 +1,3 @@
{
"role": "Volo.Docs.HttpApi"
}

37
modules/docs/src/Volo.Docs.Common.HttpApi/Volo/Docs/Documents/DocsDocumentPdfController.cs

@ -0,0 +1,37 @@
using System.Threading.Tasks;
using Asp.Versioning;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Content;
using Volo.Docs.Common;
using Volo.Docs.Common.Documents;
namespace Volo.Docs.Documents;
[RemoteService(Name = DocsCommonRemoteServiceConsts.RemoteServiceName)]
[Area(DocsCommonRemoteServiceConsts.ModuleName)]
[ControllerName("DocumentPdf")]
[Route("api/docs/documents/pdf")]
public class DocsDocumentPdfController : DocsControllerBase, IDocumentPdfAppService
{
protected IDocumentPdfAppService DocumentPdfAppService { get; }
public DocsDocumentPdfController(IDocumentPdfAppService documentPdfAppService)
{
DocumentPdfAppService = documentPdfAppService;
}
[HttpGet]
[Route("download")]
public virtual Task<IRemoteStreamContent> DownloadPdfAsync(DocumentPdfGeneratorInput input)
{
return DocumentPdfAppService.DownloadPdfAsync(input);
}
[HttpGet]
[Route("exists")]
public virtual Task<bool> ExistsAsync(DocumentPdfGeneratorInput input)
{
return DocumentPdfAppService.ExistsAsync(input);
}
}

32
modules/docs/src/Volo.Docs.Common.HttpApi/Volo/Docs/Documents/DocsDocumentPdfGeneratorController.cs

@ -1,32 +0,0 @@
using System.Threading.Tasks;
using Asp.Versioning;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp;
using Volo.Abp.Content;
using Volo.Docs.Common;
using Volo.Docs.Common.Documents;
namespace Volo.Docs.Documents;
[RemoteService(Name = DocsCommonRemoteServiceConsts.RemoteServiceName)]
[Area(DocsCommonRemoteServiceConsts.ModuleName)]
[ControllerName("Document")]
[Route("api/docs/documents")]
public class DocsDocumentPdfGeneratorController : DocsControllerBase, IDocumentPdfGeneratorAppService
{
protected IDocumentPdfGeneratorAppService DocumentPdfGeneratorAppService { get; }
public DocsDocumentPdfGeneratorController(IDocumentPdfGeneratorAppService documentPdfGeneratorAppService)
{
DocumentPdfGeneratorAppService = documentPdfGeneratorAppService;
}
[HttpGet]
[Route("pdf")]
public async Task<IRemoteStreamContent> GeneratePdfAsync(DocumentPdfGeneratorInput input)
{
var streamContent = await DocumentPdfGeneratorAppService.GeneratePdfAsync(input);
Response.Headers.ContentDisposition = $"inline; filename=\"{streamContent.FileName}\"";
return streamContent;
}
}

6
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/BlobProjectPdfFileStore.cs

@ -53,12 +53,6 @@ public class BlobProjectPdfFileStore : IProjectPdfFileStore, ITransientDependenc
return null;
}
var lastModificationTime = pdfFile.LastModificationTime ?? pdfFile.CreationTime;
if(lastModificationTime.Add(Options.Value.PdfFileCacheExpiration) <= Clock.Now)
{
return null;
}
return await BlobContainer.GetOrNullAsync(Options.Value.CalculatePdfFileName(project, version, languageCode));
}

11
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/DocsProjectPdfGeneratorOptions.cs

@ -1,5 +1,4 @@
using System;
using Scriban.Syntax;
namespace Volo.Docs.Projects.Pdf;
@ -29,15 +28,9 @@ public class DocsProjectPdfGeneratorOptions
/// </summary>
public string IndexPagePath { get; set; }
/// <summary>
/// PDF file cache expiration time.
/// Default value is 24 hours.
/// </summary>
public TimeSpan PdfFileCacheExpiration { get; set; } = TimeSpan.FromHours(24);
/// <summary>
/// The function to calculate the PDF file name.
/// Default is "{project.ShortName}-{version}-{languageCode}.pdf".
/// Default is "{project.ShortName}-{version}-{languageCode}.zip".
/// </summary>
public Func<Project, string, string, string> CalculatePdfFileName { get; set; }
@ -115,6 +108,6 @@ public class DocsProjectPdfGeneratorOptions
width: 100%;
}";
CalculatePdfFileName = (project, version, languageCode) => $"{project.ShortName}-{version}-{languageCode}.pdf";
CalculatePdfFileName = (project, version, languageCode) => $"{project.ShortName}-{version}-{languageCode}.zip";
}
}

2
modules/docs/src/Volo.Docs.Domain/Volo/Docs/Projects/Pdf/IHtmlToPdfRenderer.cs

@ -6,5 +6,5 @@ namespace Volo.Docs.Projects.Pdf;
public interface IHtmlToPdfRenderer
{
Task<MemoryStream> RenderAsync(string title, string html, List<PdfDocument> documents);
Task<Stream> RenderAsync(string title, string html, List<PdfDocument> documents);
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save